gpt4 book ai didi

java - 当适配器中的项目被删除时刷新 ListView

转载 作者:行者123 更新时间:2023-12-01 17:28:05 25 4
gpt4 key购买 nike

我创建了一个项目 ListView ,其中每个项目如下所示:

enter image description here

在简化的代码中,它看起来像这样:

公共(public)类 MyBAdapter 扩展了 ArrayAdapter {

    private static class ViewHolder {
public ImageButton ib_Delete;
public ToggleButton tb_Status;
}

public MyBAdapter(Context context, ArrayList<MyB> aB) {
super(context, 0, aB);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

final MyB b = getItem(position);

ViewHolder viewHolder;
if (convertView == null) {
viewHolder = new ViewHolder();
LayoutInflater inflater = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate( R.layout.item_b_myb, parent, false);
viewHolder.ib_DeleteB = convertView.findViewById( R.id.ib_DeleteB );
viewHolder.tb_Status = convertView.findViewById( R.id.tb_Status );

convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}

return convertView;
}

}

现在,我希望一旦用户单击 x 按钮上的 ToggleButton ,它将从列表中删除此项,并且 View 将在此屏幕上进行更新。

我该怎么做?

我发现在这种情况下 notifyDataSetChanged() 不起作用。

基本上我想做的是刷新列表而不再次调用 Activity 。

谢谢

最佳答案

你可以这样尝试:

public static class MyBAdapter extends ArrayAdapter {

private ArrayList<String> aB;
private class ViewHolder {
public ImageButton ib_Delete;
public ToggleButton tb_Status;
public TextView text;
}

public MyBAdapter(Context context, ArrayList<String> aB) {
super(context,0, aB);
this.aB = aB;

}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

ViewHolder viewHolder;
if (convertView == null) {
viewHolder = new ViewHolder();
LayoutInflater inflater = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate( R.layout.item_b_myb, parent, false);
viewHolder.ib_Delete = convertView.findViewById( R.id.ib_DeleteB );
viewHolder.tb_Status = convertView.findViewById( R.id.tb_Status );
viewHolder.text = convertView.findViewById( R.id.text );

convertView.setTag(viewHolder);


} else {
viewHolder = (ViewHolder) convertView.getTag();
viewHolder.tb_Status.setChecked(false);
}

viewHolder.text.setText(aB.get(position));
viewHolder.ib_Delete.setTag(position);
viewHolder.ib_Delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(viewHolder.tb_Status.isChecked()){
delete((Integer)view.getTag());
}
}
});
return convertView;
}

private void delete(int position) {
aB.remove(position);
notifyDataSetChanged();
}

@Override
public int getCount() {
return aB.size();
}
}

关于java - 当适配器中的项目被删除时刷新 ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61178150/

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