如何以编程方式显示/隐藏ListView中的复选框

时间:2016-12-10 02:07:02

标签: java android listview checkbox

我有下一个问题:我使用以下适配器来填充ListView:

public class PlaylistCursorAdapter extends CursorAdapter{

public PlaylistCursorAdapter(Context context, Cursor cursor){
    super(context, cursor, 0);
}

public static class ViewHolder{
    CheckBox checkBox;
    TextView playlistTitle;

    public ViewHolder(View view){

        checkBox = (CheckBox)view.findViewById(R.id.checkBox);
        playlistTitle = (TextView)view.findViewById(R.id.playlistTitle);
    }
}

@Override
public View newView(Context context, Cursor cursor, ViewGroup viewGroup) {
    View view = LayoutInflater.from(context).inflate(R.layout.playlist_item, viewGroup, false);
    ViewHolder viewHolder = new ViewHolder(view);
    view.setTag(viewHolder);
    return view;
}

@Override
public void bindView(View view, Context context, Cursor cursor) {

    ViewHolder viewHolder = (ViewHolder)view.getTag();
    viewHolder.checkBox.setVisibility(View.GONE);

    int playlistName = cursor.getColumnIndex(MediaStore.Audio.Playlists.NAME);
    String playlist = cursor.getString(playlistName);

    viewHolder.playlistTitle.setText(playlist);
}
}

正如你所看到的那样,我在行中有一个复选框,它在开始时已经消失了,我想要做的是在执行onItemLong时显示所有这些(复选框)。

实际上我已经在我的活动中实现了onItemLong,我几乎完成了以下代码的任务:

 public void showCheckBoxes(){
    for(int i = 0; i != playlist.getAdapter().getCount(); i++) {

        mCheckBox = (CheckBox) playlist.getChildAt(i).findViewById(R.id.checkBox);
        mCheckBox.setVisibility(View.VISIBLE);
        getActivity().invalidateOptionsMenu();
    }
}

该方法正常工作,直到您可以在屏幕上看到ListView中的所有项目。 但后来我注意到(mCheckBox =(CheckBox)playlist.getChildAt(i).findViewById(R.id.checkBox);) - 实际上是新问题,因为如果我的listview比屏幕长,我总是得到以下错误 - (java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法' android.view.View android.view.View.findViewById(int)'然后应用程序崩溃。

是的,我明白为什么会这样,但不知道如何解决问题。

如果有人会给我回答,提示,链接或某些想法如何解决问题,我们将非常感激。

是否有可能更改代码以显示/隐藏复选框。也许有办法在不调用.findViewById的情况下这样做。

提前谢谢。

1 个答案:

答案 0 :(得分:2)

执行以下操作

    square.clipsToBounds = true

我只需要一个名为public class PlaylistCursorAdapter extends CursorAdapter{ public boolean isAllItemsVisible; public PlaylistCursorAdapter(Context context, Cursor cursor){ super(context, cursor, 0); } public static class ViewHolder{ CheckBox checkBox; TextView playlistTitle; public ViewHolder(View view){ checkBox = (CheckBox)view.findViewById(R.id.checkBox); playlistTitle = (TextView)view.findViewById(R.id.playlistTitle); } } @Override public View newView(Context context, Cursor cursor, ViewGroup viewGroup) { View view = LayoutInflater.from(context).inflate(R.layout.playlist_item, viewGroup, false); ViewHolder viewHolder = new ViewHolder(view); view.setTag(viewHolder); return view; } @Override public void bindView(View view, Context context, Cursor cursor) { ViewHolder viewHolder = (ViewHolder)view.getTag(); if(isAllItemsVisible) viewHolder.checkBox.setVisibility(View.VISIBLE); else viewHolder.checkBox.setVisibility(View.GONE); int playlistName = cursor.getColumnIndex(MediaStore.Audio.Playlists.NAME); String playlist = cursor.getString(playlistName); viewHolder.playlistTitle.setText(playlist); } } 的布尔值来保持所有项目的可见性。

要显示所有isAllItemsVisible,您只需要调用以下方法。

checkbox

试试这个!希望它对你有用!

相关问题