我有下一个问题:我使用以下适配器来填充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的情况下这样做。
提前谢谢。
答案 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
试试这个!希望它对你有用!