У меня есть ArrayList, который использует ArrayAdapter для отображения его данных списка в ListViewКак обновить ListView из класса ArrayAdapter?
Каждый элемент ListView имеет один TextView и кнопку. Щелчок по кнопке обновляет данные, хранящиеся в ArrayList, и это отлично работает. Как получить ListView для обновления одновременно? Я знаю, как это сделать из Activity, где создан ArrayAdapter, потому что я могу вызвать itemAdapter.notifyDataSetChanged(), чтобы обновить представление. Но я не вижу, как это сделать из класса ArrayAdapter (то есть ListItemAdapter), когда нажата кнопка myButton.
Любые идеи? Благодарю.
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;
}
}
вы можете использовать 'notifyDataSetChanged' непосредственно в onClickListener – doodeec