【问题标题】:adding static data to existing listView where data is populated from sqlite将静态数据添加到从 sqlite 填充数据的现有 listView
【发布时间】:2018-02-05 02:11:39
【问题描述】:

我有以下代码将数据从 sqlite 添加到 listView。 (代码有效)但是,我想在 listView 上有静态数据,并且还具有从 sqlite 添加的功能。这意味着,我想用数据“A”、“B”、“C”作为默认值做一个 listView。因此,当用户单击“添加”功能时,用户可以将数据添加到 sqlite 并显示到“A”、“B”、“C”数据所在的同一列表视图中。 请帮忙。

【问题讨论】:

  • 您想为您的列表视图添加默认值吗?只需在 listView.setAdapter(adapter); 之后添加 A、B、C -> list.add(A), list.add(B), list.add(C)
  • @nightmaregiba list.add("新加坡","4.772",R.mipmap.newsgd);这是我要添加的数据,但我有一个错误,无法解析方法'add(java.lang.String,java.lang.String,int)请帮助谢谢
  • 你的意思是前3行的数据类型不同?
  • 属于同一数据类型

标签: android sqlite listview


【解决方案1】:

第一步

声明一个空数组列表,然后添加静态数据,如您的情况 A、B、C 并用这些数据填充适配器。

ArrayList<String> arrayList=new ArrayList<>();
            arrayList.add("A");
            arrayList.add("B");
            arrayList.add("C");

MyAdapter myAdapter=new MyAdapter(this);
listview.setAdapter(myAdapter);
myAdapter.addItem(arrayList);   

在Adapter中添加这个功能

public void addItem(ArrayList<String> arraylist){
   this.arraylist = arraylist;
   notifyDataSetChanged();
   }

第 2 步

在你的添加项目功能中做两件事

1 将这些数据添加到您的数据库中。

2 将这些数据添加到您在步骤 1 中创建的数组列表中,并将其添加到适配器,如下面的代码。

databaseHelper.addData("D");
arrayList.add("D");
myAdapter.addItem(arrayList);

第 3 步

当你第二次进入屏幕时检查数据库是否有数据初始化,如果是,然后修改如下所示的第一步

    ArrayList<String> arrayList=new ArrayList<>();
                arrayList.add("A");
                arrayList.add("B");
                arrayList.add("C");

 MyAdapter myAdapter=new MyAdapter(this);
 listview.setAdapter(myAdapter);

if(databaseHelper.getDataList()!=null &databaseHelper.getDataList().size()>0{
    arrayList.addAll(databaseHelper.getDataList());
    myAdapter.addItem(arrayList);
 }else{
    myAdapter.addItem(arrayList);
 }

【讨论】:

    【解决方案2】:

    您使用imageViewToByte() 将 ImageView 更改为字节,但 R.mipmap.newsgd 不是 ImageView,它是资源

    【讨论】:

      【解决方案3】:

      你要做的就是:-

          //get all data
          Cursor cursor = MainActivity.sqLiteHelper.getData("SELECT * FROM FOOD");
          list.clear();
          while (cursor.moveToNext())
          {
              int id = cursor.getInt(0);
              String name = cursor.getString(1);
              String price = cursor.getString(2);
              byte [] image = cursor.getBlob(3);
      
              list.add(new Food(id,name,price,image));
          }
          // Adding your three items for the list
          list.add(new food(your_id_for_A,your_name_for_A,your_price_for_A,your_image_for_A));
          list.add(new food(your_id_for_B,your_name_for_B,your_price_for_B,your_image_for_B));
          list.add(new food(your_id_for_C,your_name_for_C,your_price_for_C,your_image_for_C));
          adapter.notifyDataSetChanged();
      

      请注意,您可能需要注意您提供的 id 以及随后如何处理该 id,因为您可能需要区分数据库中的行与添加的行。

      【讨论】:

      • 对不起,当我添加:“list.add(new Food(50,"Singapore","4.772",R.mipmap.newsgd));"它仍然有错误
      • 错误仍然落在数据类型上。请建议我该怎么做。谢谢
      • @awa 这是一个完全不同的问题。我相信list.add(new food(-10,"Singapore","4.772",new byte[]{0}); 会起作用。
      【解决方案4】:

      只需在listView.setAdapter(adapter)之后添加A、B、C; -> list.add(A), list.add(B), list.add(C)

      例如:

      list.add(new Food(someId, "Singapore","4.772",R.mipmap.newsgd, ...));
      

      希望对您有所帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-31
        • 2017-11-09
        相关资源
        最近更新 更多