在列表视图中只显示SQLite数据库中的单个列名 - Android

在列表视图中只显示SQLite数据库中的单个列名 - Android

问题描述:

我只需要在列表视图中设置第一个名称字段值。 正在查询数据并获取所有值并在列表视图中显示它们。需要只显示第一个名字在列表视图中只显示SQLite数据库中的单个列名 - Android

的代码,

import c...l.Database.ItemCRUDOperations; 
    import c...l.Model.Item; 

    List<Item> items; 

    ListView listView = (ListView) findViewById(R.id.listView); 

    itemCrud = new ItemCRUDOperations(this); 
    itemCrud.open(); 

    items = itemCrud.getAllItems(); // returns id, first name, last name ... 
    // i need to only show first name in list view, currently it is showing all fields in listview 
    //I tried items.getFirstName() as I have getters and setters to it but not getting the value. 

    itemCrud.close(); 

    ArrayAdapter<Item> adapter = new ArrayAdapter<>(this, 
      android.R.layout.simple_list_item_1, items); 
    listView.setAdapter(adapter); 
+0

而是项目的ArrayList创建字符串的ArrayList –

试试这个代码:

... 
List<String> firstNames = new ArrayList<>(); 
for (Item item : items) { 
    firstNames.add(item.getFirstName); 
} 

ArrayAdapter<Item> adapter = new ArrayAdapter<>(this, 
     android.R.layout.simple_list_item_1, firstNames); 
listView.setAdapter(adapter); 

或者你可以简单的覆盖toString()方法在Item类:

@Override 
public String toString() { 
    return getFirstName(); 
} 
+0

覆盖toString方法,简单的解决方案,干杯! 。 – Mann

使用此得到一个列表,只有姓:

List<String> firstNamelist = new ArrayList<>(); 
for(Item item : items){ 
    firstnameList.add(item.getFirstName()); 
} 

然后传递firstNameList到适配器:

ArrayAdapter<String> adapter = new ArrayAdapter<>(this, 
      android.R.layout.simple_list_item_1, firstNameList); 

希望能帮助到你。

在另一个答案中已经建议的最简单的选择是创建字符串列表并将其传递给适配器而不是项目列表。

另外一个更一般的,方法是实现自己的列表适配器,覆盖方法getView在里面,像这样:

class ItemListAdapter extends ArrayAdapter<Item> { 

    private static class ViewHolder { 
     TextView firstName; 
     TextView lastName; 
     // More fields ... 
    } 

    ItemListAdapter(Context context, List<Item> items) { 
     super(context, 0, items); 
    } 

    @Override 
    @NonNull 
    public View getView(final int position, View view, @NonNull ViewGroup parent) { 
     final Item item = getItem(position); 

     final ViewHolder viewHolder; 
     if (view == null) { 
      viewHolder = new ViewHolder(); 
      LayoutInflater inflater = LayoutInflater.from(getContext()); 
      view = inflater.inflate(R.layout.item_layout, parent, false); 

      viewHolder.firstName = (TextView) view.findViewById(R.id.first_name_text_view); 
      view.setTag(viewHolder); 
     } else { 
      viewHolder = (ItemListAdapter.ViewHolder) view.getTag(); 
     } 

     viewHolder.firstName.setText(item.getFirstName()); 
     return view; 
    } 
} 

通过这种方法,你就能了解更多信息在将来添加到列表项如果你需要。