【问题标题】:Android getting data out of listviewAndroid 从列表视图中获取数据
【发布时间】:2017-05-16 00:25:00
【问题描述】:

我目前正在编写一个带有列表视图的应用程序,其中填充了来自 SQLite 表的数据,如下所示:

public void printDatabase(){
    Cursor c = handler.getAllRows();
    String[] fieldNames = new String[] {DBHandler.COLUMN_WORKER_ID, DBHandler.COLUMN_WORKER_NAME, DBHandler.COLUMN_WORKER_SURNAME, DBHandler.COLUMN_WORKER_COST};
    int[] toView = new int[] {R.id.item_worker_id, R.id.item_worker_name, R.id.item_worker_surname, R.id.item_worker_cost};
    SimpleCursorAdapter cAdapter;
    cAdapter = new SimpleCursorAdapter(getBaseContext(), R.layout.worker_items, c, fieldNames, toView, 0);
    list = (ListView) findViewById(R.id.worker_listView);
    list.setAdapter(cAdapter);
}

现在我想通过单击项目从项目的列表视图中获取数据。我到处寻找解决方案并找到了这个:

class ItemListener implements AdapterView.OnItemClickListener{

    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
        Object o = list.getItemAtPosition(i);
        String s = list.toString();
    }
}

但我从中得到的只是对用于填充列表视图的光标的引用。从列表视图中获取数据需要什么?

【问题讨论】:

    标签: android sqlite listview


    【解决方案1】:

    试试这个:

    class ItemListener implements AdapterView.OnItemClickListener{
    
    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
        TextView textView = (TextView) view.findViewById(R.id.list_content);
            String text = textView.getText().toString(); 
            //Log.d("Choosen: " + text);
    }}
    

    【讨论】:

      【解决方案2】:

      您的解决方案已经完成了一半。

      Cursor itemCursor = (Cursor) list.getItemAtPosition(i);
      

      这会返回一个指向被点击行的光标。您可以从中获取数据:

      class ItemListener implements AdapterView.OnItemClickListener {
          @Override
          public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
              Cursor itemCursor = (Cursor) list.getItemAtPosition(i);
      
              String workerId = itemCursor.getString(itemCursor.getColumnIndex(DBHandler. COLUMN_WORKER_ID));
              String workerName = itemCursor.getString(itemCursor.getColumnIndex(DBHandler.COLUMN_WORKER_NAME));
              String workerSurname = itemCursor.getString(itemCursor.getColumnIndex(DBHandler.COLUMN_WORKER_SURNAME));
              String workerCost = itemCursor.getString(itemCursor.getColumnIndex(DBHandler.COLUMN_WORKER_COST));
          }
      }
      

      【讨论】:

        【解决方案3】:

        使光标全局化;

        Cursor cursor ;
        

        在您的 OnItemClick 中

        class ItemListener implements AdapterView.OnItemClickListener{
        
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
             cursor.moveToPosition(position);
             String Id = cursor.getString(itemCursor.getColumnIndex(DBHandler. COLUMN_WORKER_ID));
         }
        
        }
        

        【讨论】:

        • 天哪,为什么是全局变量?
        • 因为它比铸造先生便宜。
        猜你喜欢
        • 2014-04-01
        • 1970-01-01
        • 2014-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多