gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 19:27:13 24 4
gpt4 key购买 nike

我有下一个问题:我使用以下适配器来填充 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 时显示所有复选框(复选框)。

实际上我已经在我的 Activity 中实现了 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。

提前谢谢你。

最佳答案

执行以下操作

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 的 boolean 值来保持所有项目的可见性。

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

public void showCheckBoxes(){
mplaylistCursorAdapter.isAllItemVisible=true;
mplaylistCursorAdapter.notifyDatasetChanged();
}

试试这个!希望对您有用!

关于java - 如何以编程方式在 ListView 中显示/隐藏复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41071447/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com