在Android中,Adapter是用于填充数据到ListView或RecyclerView等视图组件的重要组件之一。当我们更新了Adapter中的数据源后,需要调用Adapter的notifyDataSetChanged()方法来通知视图组件进行刷新。
以下是一个示例代码,演示了如何解决Android中adapter.NotifyDataSetChanged问题:
public class MainActivity extends AppCompatActivity {
private ListView listView;
private CustomAdapter adapter;
private List dataList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = findViewById(R.id.listView);
dataList = new ArrayList<>();
adapter = new CustomAdapter(this, dataList);
listView.setAdapter(adapter);
// 模拟更新数据源
Button updateButton = findViewById(R.id.updateButton);
updateButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 更新数据源
dataList.clear();
dataList.add("Item 1");
dataList.add("Item 2");
dataList.add("Item 3");
// 通知Adapter数据源已更改
adapter.notifyDataSetChanged();
}
});
}
private static class CustomAdapter extends BaseAdapter {
private Context context;
private List dataList;
public CustomAdapter(Context context, List dataList) {
this.context = context;
this.dataList = dataList;
}
@Override
public int getCount() {
return dataList.size();
}
@Override
public Object getItem(int position) {
return dataList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.list_item, parent, false);
}
TextView textView = convertView.findViewById(R.id.textView);
textView.setText(dataList.get(position));
return convertView;
}
}
}
在上面的示例中,我们在MainActivity的onCreate方法中初始化ListView和CustomAdapter。当点击按钮时,我们更新了dataList数据源,并调用adapter的notifyDataSetChanged方法来通知ListView进行刷新。
请注意,这个示例使用了一个自定义的CustomAdapter来适配数据到ListView。根据实际需求,你可以使用BaseAdapter、ArrayAdapter或RecyclerView.Adapter等不同类型的Adapter来实现。同时,根据你的界面布局和数据结构,你需要适当修改CustomAdapter中的代码。