从List 填充ListView
基本上我有一个类成分的对象列表,如下所示:
class Ingredient { public int id; public String name; public Ingredient(String name) { this.name = name; } }
所以列表中的每个对象都有一个名称。
现在使用ArrayAdapter我需要一个用名称填充的字符串列表。 有没有办法将ArrayAdapter与我的成分列表一起使用? 这就是它现在的样子
List ingredientsList= new ArrayList(); ingredientsList.add(new Ingredient("foo")); ingredientsList.add(new Ingredient("bar"));
使用以下。 您可以使用for循环并填充您的ingredientsList
。 以下只是一个例子
List ingredientsList= new ArrayList (); Ingredient i= new Ingredient("foo"); ingredientsList.add(i); Ingredient i1= new Ingredient("bar"); ingredientsList.add(i1);
然后
ListView lv = (ListView) findViewById(R.id.listview); // initialize listview lv.setAdpater(new CustomAdapterArrayAdapter(ActivityName.this,ingredientsList)); // set the custom adapter to listview
您可以使用CustomAdapterArrayAdapter
自定义布局
public class CustomAarrayAdapter extends ArrayAdapter { List ingredientsList; public CustomArrayAdapter(Context context, List list) { super(context,0,list); ingredientList = list; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { convertView = mInflater.inflate(R.layout.row,parent,false); // inflate custom layout called row holder = new ViewHolder(); holder.tv =(TextView) convertView.findViewById(R.is.textView1); // initialize textview convertView.setTag(holder); } else { holder = (ViewHolder)convertView.getTag(); } Ingredient in = (Ingredient)ingredientsList.get(position); holder.tv.setText(in.name); // set the name to the text; return convertView; } static class ViewHolder { TextView tv; } }
http://developer.android.com/training/improving-layouts/smooth-scrolling.html
ViewHolder用于平滑滚动和性能
row.xml
编辑:
不使用自定义适配器
class Ingredient { public int id; public String name; public Ingredient(String name) { this.name = name; } @Override public String toString() { // TODO Auto-generated method stub return this.name.toString(); } }
然后
公共类MainActivity扩展Activity {
List ingredientsList= new ArrayList (); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); for(int i=0;i<10;i++) { ingredientsList.add(new Ingredient("foo"+i)); } ArrayAdapter adapter = new ArrayAdapter (this,android.R.layout.simple_list_item_1,ingredientsList); ListView lv= (ListView) findViewById(R.id.listView1); lv.setAdapter(adapter); } }
然后
activity_main.xml中
快照
扩展数组适配器类:
public class MyAdapter extends ArrayAdapter { Activity activity; public MyAdapter(Activity context, int resource, List objects) { super(context, resource, objects); this.activity = context; } public View getView(int position, View convertView, ViewGroup parent) { Ingredient currentIngredient = getItem(position); //Do Something .... }
- 为什么全局变量不会在同一个全局变量中使用全局函数更新? 安卓/ Java的
- 自定义HTTP方法在Retrofit 2中不起作用
- Gradle Build失败并出现exception:java.exe’以非零退出值2结束
- 如何使用recyclelerview和databse在android中将位置明智的对象数据传递给另一个
- Libgdx和Google In-App-Purchase结果
- 如何在设备离线时获取Android设备的正确当前日期和时间
- 如何在Android应用中显示Latin-1字符
- 我可以在Android上的多个线程中使用相同的RoomDatabase对象吗?
- Android:通过RTP(G.711 PCMU)将.wav发送到SIP-Phone非常嘈杂,基于SipDroid / MjSIP的噼啪声