在 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;
    }

希望对您有所帮助