【问题标题】:How to get values from list and show it in list view android如何从列表中获取值并将其显示在列表视图android中
【发布时间】:2017-05-10 01:05:28
【问题描述】:

我是安卓新手。我有一个使用 listview 的应用程序,我想从数据库中获取数据并将其显示在 listview 中。 我有获取值并将其放入列表中,但从列表中获取时出错。

AllOrderDbManager.java

 public static List<DetailItem> getDetails(String ordId) {  //ordId is the row id
    List<DetailItem> data = new ArrayList<>();
    String query = AllOrderDbHelper._ID + "=?";
    Cursor cursor = database.query(AllOrderDbHelper.TABLE_NAME2, null, query, new String[]{ordId}, null, null, null);

    if (cursor != null)
        if (cursor.moveToFirst()) {
            do {
                String food = cursor.getString(cursor.getColumnIndex(FOOD_NAME));
                String quantity = cursor.getString(cursor.getColumnIndex(QUANTITY));

                DetailItem detailItem = new DetailItem();
                detailItem.setFood(food);
                detailItem.setQuantity(quantity);
                data.add(detailItem);
            } while (cursor.moveToNext());
        }
    cursor.close();
    return data;
}

这是我的 DbManager。在这里,我通过行 id 获取值并将其设置为列表

DetailItem.java

public class DetailItem {

String food = "";
String quantity = "";

public String getFood() {
    return food;
}

public void setFood(String food) {
    this.food = food;
}

public String getQuantity() {
    return quantity;
}

public void setQuantity(String quantity) {
    this.quantity = quantity;
}
@Override
public String toString() {
    return food;

 }
}

MainActivity.java

public class MainActivity extends AppCompatActivity {
private AllOrderDbManager allOrderDbManager;
private ListView listView;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    allOrderDbManager = new AllOrderDbManager(this);
    allOrderDbManager.open();

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



    Intent intent = getIntent(); 
    String ordId = intent.getStringExtra("ordId");

   List<DetailItem> values = AllOrderDbManager.getDetails(ordId);
    for (DetailItem detailItem: values) {
        String food_name = detailItem.getFood();
        String quantity = detailItem.getQuantity();


    }

     String[] from = new String[] {food_name, quantity};
        int[] to = new int[] {R.id.tvItemsName, R.id.tvQuantity};

        SimpleAdapter adapter = new SimpleAdapter(this,values,                                                        

        R.layout.all_order_details_list, from, to);

        listView.setAdapter(adapter);
 }
}

这里我无法从列表中获取值并将其设置为列表视图。

activity_main.xml

   RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent" >

     <ListView
      android:id="@+id/lvDetails"
       android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_alignParentLeft="true"
      android:layout_alignParentTop="true" >
     </ListView>

all_order_details_list

 <TextView
    android:id="@+id/tvItemsName"
    android:layout_width="0dip"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:gravity="center"
    android:textStyle="bold"
    android:textColor="@android:color/black"
    android:textSize="15sp" />
<TextView
    android:id="@+id/tvQuantity"
    android:layout_width="0dip"
    android:textStyle="bold"
    android:gravity="center"
    android:textSize="15sp"
    android:textColor="@android:color/black"
    android:layout_height="match_parent"
    android:layout_weight="1"/>

请帮忙。

【问题讨论】:

  • 错误是什么?
  • 请在此处粘贴 logcat 错误。

标签: java android sqlite listview


【解决方案1】:

我已经用 HashMap 解决了。

public class MainActivity extends AppCompatActivity {
private AllOrderDbManager allOrderDbManager;
private ListView listView;
static final String FOODNAME = "foodName";
static final String QTY = "quantity";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    allOrderDbManager = new AllOrderDbManager(this);
    allOrderDbManager.open();

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

    Intent intent = getIntent(); 
    String ordId = intent.getStringExtra("ordId");

    String[] from = new String[] {"foodName","quantity"};
    int[] to = new int[] {R.id.tvItemsName, R.id.tvQuantity};

    List<DetailItem> values = AllOrderDbManager.getDetails(ordId);
    ArrayList<HashMap<String, String>> test = new ArrayList<HashMap<String, String>>();

    for (DetailItem detailItem: values) {
        HashMap<String, String> map = new HashMap<String, String>();
           map.put(FOODNAME,(String)detailItem.getFood());
           map.put(QTY,(String)detailItem.getQuantity());
            test.add(map);
    }

    SimpleAdapter adapter = new SimpleAdapter(this, test, R.layout.all_order_details_list, from, to);
    listView.setAdapter(adapter);

}

谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    • 2013-06-28
    • 2011-11-08
    • 2011-06-25
    • 1970-01-01
    • 2015-05-06
    • 1970-01-01
    相关资源
    最近更新 更多