在 ListView 中制作 unclickable/touchable 项
Make unclickable/touchable items in ListView
我有一个 ListView,我想让一些项目不可点击(因此点击不会显示任何效果),但有些是。有点像listView的一种header/section。
我发现方法 public boolean isEnabled(int position)
可以被重写,因此 return 值 false
可以使其不可触及。所以我尝试了这个:
@Override
public View getView(int position, View view, ViewGroup parent)
{
...
if ( Item should be unclickable)
{
clickable = false;
isEnabled(position);
....
}
else
{
clickable = true;
isEnabled(position);
....
}
...
}
@Override
public boolean isEnabled(int position ) {
return clickable;
}
但这不起作用。它不影响 ListView。
当我只在我想让我的项目不可点击时调用 isEnabled 时,我的 listView 中的所有内容都是不可点击的...
xml 的列表视图:
<ListView
android:id="@+id/listView_playlists"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:fastScrollEnabled="true"
android:smoothScrollbar="true"
android:focusable="false"
android:drawSelectorOnTop="true"
android:gravity="top" >
</ListView>
有人可以帮我吗?
编辑
代码:
@Override
public View getView(int position, View view, ViewGroup parent) {
View rview = view;
holder = null;
if (rview == null)
{
LayoutInflater inflater = context.getLayoutInflater();
rview= inflater.inflate(R.layout.row_playlist, null, true);
holder = new ViewHolder(rview);
rview.setTag(holder);
}
else
{
holder = (ViewHolder) rview.getTag();
}
if (AL_playlists.get(position).m_type.equalsIgnoreCase("header"))
{
clickable = false;
isEnabled(position);
holder.txtTitle.setText(AL_playlists.get(position).get_playlist_name());
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)holder.txtTitle.getLayoutParams();
params.setMargins(0, 10, 0, 10); //substitute parameters for left, top, right, bottom
holder.txtTitle.setLayoutParams(params);
holder.txtTitle.setGravity(Gravity.CENTER);
holder.imgAlbumart.setVisibility(View.GONE);
holder.txtArtist.setVisibility(View.INVISIBLE);
}
else
{
clickable = true;
isEnabled(position);
mArtLoader.loadBitmap(AL_playlists.get(position).get_picture_path() ,holder.imgAlbumart);
holder.txtTitle.setText(AL_playlists.get(position).get_playlist_name());
holder.txtArtist.setText(String.valueOf(AL_playlists.get(position).get_list_size()));
}
return rview;
}
@Override
public boolean isEnabled(int position ) {
if (clickable == true)
return true;
else
return false;
}
@Override
public boolean areAllItemsEnabled ()
{
return false;
}
尝试:
ListView myListView = (ListView)findViewById(R.id.listView);
myListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> ad, View view, int pos, long arg) {
if(pos == 3) {
view.findViewById(R.id.listView).setClickable(false);
}
}
});
试一试
@Override
public View getView(int position, View view, ViewGroup parent)
{
...
...
}
@Override
public boolean isEnabled(int position ) {
if ( Item should be unclickable)
{
return = false;
}
else
{
return = true;
}
}
@Override
public boolean areAllItemsEnabled() {
return false;
}
希望对您有所帮助
我有一个 ListView,我想让一些项目不可点击(因此点击不会显示任何效果),但有些是。有点像listView的一种header/section。
我发现方法 public boolean isEnabled(int position)
可以被重写,因此 return 值 false
可以使其不可触及。所以我尝试了这个:
@Override
public View getView(int position, View view, ViewGroup parent)
{
...
if ( Item should be unclickable)
{
clickable = false;
isEnabled(position);
....
}
else
{
clickable = true;
isEnabled(position);
....
}
...
}
@Override
public boolean isEnabled(int position ) {
return clickable;
}
但这不起作用。它不影响 ListView。
当我只在我想让我的项目不可点击时调用 isEnabled 时,我的 listView 中的所有内容都是不可点击的...
xml 的列表视图:
<ListView
android:id="@+id/listView_playlists"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:fastScrollEnabled="true"
android:smoothScrollbar="true"
android:focusable="false"
android:drawSelectorOnTop="true"
android:gravity="top" >
</ListView>
有人可以帮我吗?
编辑 代码:
@Override
public View getView(int position, View view, ViewGroup parent) {
View rview = view;
holder = null;
if (rview == null)
{
LayoutInflater inflater = context.getLayoutInflater();
rview= inflater.inflate(R.layout.row_playlist, null, true);
holder = new ViewHolder(rview);
rview.setTag(holder);
}
else
{
holder = (ViewHolder) rview.getTag();
}
if (AL_playlists.get(position).m_type.equalsIgnoreCase("header"))
{
clickable = false;
isEnabled(position);
holder.txtTitle.setText(AL_playlists.get(position).get_playlist_name());
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)holder.txtTitle.getLayoutParams();
params.setMargins(0, 10, 0, 10); //substitute parameters for left, top, right, bottom
holder.txtTitle.setLayoutParams(params);
holder.txtTitle.setGravity(Gravity.CENTER);
holder.imgAlbumart.setVisibility(View.GONE);
holder.txtArtist.setVisibility(View.INVISIBLE);
}
else
{
clickable = true;
isEnabled(position);
mArtLoader.loadBitmap(AL_playlists.get(position).get_picture_path() ,holder.imgAlbumart);
holder.txtTitle.setText(AL_playlists.get(position).get_playlist_name());
holder.txtArtist.setText(String.valueOf(AL_playlists.get(position).get_list_size()));
}
return rview;
}
@Override
public boolean isEnabled(int position ) {
if (clickable == true)
return true;
else
return false;
}
@Override
public boolean areAllItemsEnabled ()
{
return false;
}
尝试:
ListView myListView = (ListView)findViewById(R.id.listView);
myListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> ad, View view, int pos, long arg) {
if(pos == 3) {
view.findViewById(R.id.listView).setClickable(false);
}
}
});
试一试
@Override
public View getView(int position, View view, ViewGroup parent)
{
...
...
}
@Override
public boolean isEnabled(int position ) {
if ( Item should be unclickable)
{
return = false;
}
else
{
return = true;
}
}
@Override
public boolean areAllItemsEnabled() {
return false;
}
希望对您有所帮助