Java 如何从ArrayAdapter类更新ListView?
我有一个ArrayList,它使用ArrayAdapter在ListView中显示其列表数据 每个ListView项都有一个TextView和一个按钮。单击该按钮将更新ArrayList中保存的数据,这样可以正常工作。如何让ListView同时更新?我知道如何从创建ArrayAdapter的活动中执行此操作,因为我可以调用itemAdapter.notifyDataSetChanged()来更新视图。但是当单击ButtonMyButton时,我不知道如何从ArrayAdapter类(即ListItemAdapter)中执行此操作 有什么想法吗?谢谢 StartActivity类Java 如何从ArrayAdapter类更新ListView?,java,android,listview,android-listview,Java,Android,Listview,Android Listview,我有一个ArrayList,它使用ArrayAdapter在ListView中显示其列表数据 每个ListView项都有一个TextView和一个按钮。单击该按钮将更新ArrayList中保存的数据,这样可以正常工作。如何让ListView同时更新?我知道如何从创建ArrayAdapter的活动中执行此操作,因为我可以调用itemAdapter.notifyDataSetChanged()来更新视图。但是当单击ButtonMyButton时,我不知道如何从ArrayAdapter类(即ListI
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();
}
}
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;
}
}
公共类StartActivity扩展活动{
ArrayList数据表;
列表视图列表视图;
ListItemAdapter项目适配器;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(右布局列表屏幕);
datalist=newarraylist();
listView=(listView)findViewById(R.id.ListViewId);
itemAdapter=新的ListItemAdapter(这个,android.R.layout.simple\u list\u item\u 1,datalist);
setAdapter(itemAdapter);
DataRecord DataRecord=新数据记录(“数据项1”);
datalist.add(dataRecord);
数据记录=新数据记录(“数据项2”);
datalist.add(dataRecord);
数据记录=新数据记录(“数据项3”);
datalist.add(dataRecord);
itemAdapter.notifyDataSetChanged();
}
}
ListItemAdapter类
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();
}
}
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;
}
}
公共类ListItemAdapter扩展了ArrayAdapter{
私有ArrayList数据列表;
公共ListItemAdapter(上下文上下文、int textViewResourceId、ArrayList数据列表){
super(上下文、textViewResourceId、数据列表);
this.datalist=datalist;
}
@凌驾
公共视图getView(最终整型位置、视图转换视图、最终视图组父视图){
视图v=转换视图;
如果(v==null){
LayoutInflater vi=(LayoutInflater)this.getContext().getSystemService(Context.LAYOUT\u INFLATER\u SERVICE);
v=vi.充气(R.布局.列表,空);
}
按钮mybutton=(按钮)v.findViewById(R.id.pushBtn);
最终数据记录dataitem=datalist.get(位置);
mybutton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
dataitem.information=“你好”;
对于(int i=0;i
只需在适配器中使用相同的方法,但不使用对象引用,因为您处于对象的上下文中
mybutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dataitem.information = "Hello";
notifyDataSetChanged();
}
});
只需在适配器中使用相同的方法,但不使用对象引用,因为您处于对象的上下文中
mybutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dataitem.information = "Hello";
notifyDataSetChanged();
}
});
只需在适配器中使用相同的方法,但不使用对象引用,因为您处于对象的上下文中
mybutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dataitem.information = "Hello";
notifyDataSetChanged();
}
});
只需在适配器中使用相同的方法,但不使用对象引用,因为您处于对象的上下文中
mybutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dataitem.information = "Hello";
notifyDataSetChanged();
}
});
试试这个
mybutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//
//update data
//
this.notifyDataSetChanged();
}
});
试试这个
mybutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//
//update data
//
this.notifyDataSetChanged();
}
});
试试这个
mybutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//
//update data
//
this.notifyDataSetChanged();
}
});
试试这个
mybutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//
//update data
//
this.notifyDataSetChanged();
}
});
您可以在onClickListener中直接使用
notifyDataSetChanged
您可以在onClickListener中直接使用notifyDataSetChanged
您可以在onClickListener中直接使用notifyDataSetChanged