【问题标题】:Show only single column name from SQLite db in listview - Android在列表视图中仅显示 SQLite db 中的单个列名 - Android
【发布时间】:2017-09-13 07:04:52
【问题描述】:

我只需要在列表视图中设置名字字段值。 我正在查询数据并获取所有值并将它们显示在列表视图中。只需要显示名字

代码,

    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);

【问题讨论】:

  • 代替Item ArrayList 创建String ArrayList

标签: android sqlite listview


【解决方案1】:

试试这个代码:

...
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);

或者您可以在 Item 类中简单地覆盖 toString() 方法:

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

【讨论】:

    【解决方案2】:

    使用它来获取只有名字的列表:

    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);
    

    希望对你有帮助。

    【讨论】:

      【解决方案3】:

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

      另一种更通用的方法是实现自己的列表适配器,在其中覆盖方法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;
          }
      }
      

      通过这种方法,您将来可以根据需要向列表项添加更多信息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多