gpt4 book ai didi

java - 如何从 ArrayAdapter 类更新 ListView?

转载 作者:行者123 更新时间:2023-12-01 22:30:35 24 4
gpt4 key购买 nike

我有一个 ArrayList,它使用 ArrayAdapter 在 ListView 中显示其列表数据

每个 ListView 项目都有一个 TextView 和一个 Button。单击该按钮会更新 ArrayList 中保存的数据,效果很好。如何让ListView同时更新?我知道如何从创建 ArrayAdapter 的 Activity 中执行此操作,因为我可以调用 itemAdapter.notifyDataSetChanged() 来更新 View 。但我不知道当单击 Button myButton 时如何在 ArrayAdapter 类(即 ListItemAdapter)中执行此操作。

有什么想法吗?谢谢。

StartActivity类

public class StartActivity extends Activity {

ArrayList<DataRecord> datalist;
ListView listView;
ListItemAdapter itemAdapter;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list_screen);

datalist = new ArrayList<DataRecord>();

listView = (ListView) findViewById(R.id.ListViewId);
itemAdapter = new ListItemAdapter(this, android.R.layout.simple_list_item_1, datalist);
listView.setAdapter(itemAdapter);

DataRecord dataRecord = new DataRecord("Data Item 1 ");
datalist.add(dataRecord);

dataRecord = new DataRecord("Data Item 2 ");
datalist.add(dataRecord);

dataRecord = new DataRecord("Data Item 3");
datalist.add(dataRecord);

itemAdapter.notifyDataSetChanged();
}
}

ListItemAdapter类

public class ListItemAdapter extends ArrayAdapter<DataRecord> {
private ArrayList<DataRecord> datalist;

public ListItemAdapter(Context context, int textViewResourceId, ArrayList<DataRecord> datalist) {
super(context, textViewResourceId, datalist);
this.datalist = datalist;
}

@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.list_row, null);

}
Button mybutton = (Button)v.findViewById(R.id.pushBtn);

final DataRecord dataitem = datalist.get(position);

mybutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dataitem.information = "Hello";
for (int i = 0; i < datalist.size(); i++) {
Log.d("Item", datalist.get(i).information); // this shows the ArrayList gets updated
}
}
});


if (dataitem != null) {
TextView listText = (TextView) v.findViewById(R.id.list_text);

if (listText != null) {
listText.setText(dataitem.information);
}

}
return v;
}
}

最佳答案

只需在适配器中使用相同的方法,但没有对象引用,因为您处于对象的上下文中

mybutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dataitem.information = "Hello";
notifyDataSetChanged();
}
});

关于java - 如何从 ArrayAdapter 类更新 ListView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27849550/

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