当使用自定义的ListView时,数据可能不会立即填充到列表中。这是因为ListView的填充是在后台线程中进行的,而不是在主线程中进行的。
为了解决这个问题,可以使用适配器来填充数据。适配器是ListView的重要组成部分,它负责将数据绑定到ListView中的每个项。
以下是一个示例代码,演示如何使用适配器来填充数据:
public class Item {
private String name;
public Item(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
public class CustomAdapter extends BaseAdapter {
private ArrayList- items;
private Context context;
public CustomAdapter(Context context, ArrayList
- items) {
this.context = context;
this.items = items;
}
@Override
public int getCount() {
return items.size();
}
@Override
public Object getItem(int position) {
return items.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflater = LayoutInflater.from(context);
convertView = inflater.inflate(R.layout.list_item, parent, false);
}
TextView nameTextView = convertView.findViewById(R.id.nameTextView);
Item item = items.get(position);
nameTextView.setText(item.getName());
return convertView;
}
}
public class MainActivity extends AppCompatActivity {
private ListView listView;
private CustomAdapter adapter;
private ArrayList- items;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = findViewById(R.id.listView);
items = new ArrayList<>();
adapter = new CustomAdapter(this, items);
listView.setAdapter(adapter);
// 在后台线程中添加数据到列表
new Thread(new Runnable() {
@Override
public void run() {
// 模拟加载数据的过程
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 添加数据到列表
items.add(new Item("Item 1"));
items.add(new Item("Item 2"));
items.add(new Item("Item 3"));
// 通知适配器数据已更改
runOnUiThread(new Runnable() {
@Override
public void run() {
adapter.notifyDataSetChanged();
}
});
}
}).start();
}
}
在上面的示例中,我们创建了一个CustomAdapter类,它继承自BaseAdapter类,并实现了必要的方法。在MainActivity中,我们创建了一个ListView和一个与之关联的CustomAdapter对象。然后,在后台线程中添加数据到列表,并在数据加载完成后通知适配器数据已更改。
通过使用适配器和后台线程,我们可以确保数据在ListView中及时填充。