ArrayAdapter를 사용하여 목록 데이터를 ListView에 표시하는 ArrayList가 있습니다.ArrayAdapter 클래스에서 ListView를 업데이트하려면 어떻게해야합니까?
각 ListView 항목에는 하나의 TextView와 Button이 있습니다. 버튼을 클릭하면 ArrayList에 저장된 데이터가 업데이트되며 정상적으로 작동합니다. ListView를 동시에 업데이트하려면 어떻게합니까? 보기를 업데이트하려면 itemAdapter.notifyDataSetChanged()를 호출 할 수 있기 때문에 ArrayAdapter가 만들어진 Activity에서이 작업을 수행하는 방법을 알고 있습니다. 그러나 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;
}
}
당신이 OnClickListener를 직접 notifyDataSetChanged''사용할 수 있습니다 시도 – doodeec