0

我需要某种类型的解释,说明如何从数据库中为列表视图项传递我想要的任何数据库列值。

我希望能够获取任何值,并通过 putExtras 将其传递给另一个活动。我知道如何做那部分,我没有掌握的是如何在通过意图发送它之前从列表视图中获取我想要的值。

这是我的代码和更多详细信息,可帮助您帮助我:

日.java:

package com.dd.gfit;

public class Day {

    private long id;
    private long id_routine;
    private String name;
    private String day;

    public long getId() { return id; }  
    public long getIdRoutine() { return id_routine; }   
    public String getName() { return name; }    
    public String getDay() { return day; }

    public void setId(long id) { this.id = id; }    
    public void setIdRoutine(long id_routine) { this.id_routine = id_routine; } 
    public void setName(String name) { this.name = name; }  
    public void setDay(String day) { this.day = day; }

} 

这是存储和检索值的地方。我明白了。

DaysDataSource.java:

package com.dd.gfit;

import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;

public class DaysDataSource {

    private SQLiteDatabase database;
    private MySQLiteHelper dbHelper;
    private String[] allColumns = { MySQLiteHelper.COLUMN_ID, MySQLiteHelper.COLUMN_ID_ROUTINE, MySQLiteHelper.COLUMN_NAME, MySQLiteHelper.COLUMN_DAY };

    public DaysDataSource(Context context) {
        dbHelper = new MySQLiteHelper(context);
    }

    public void open() throws SQLException {
        database = dbHelper.getWritableDatabase();
    }

    public void close() {
        dbHelper.close();
    }

    public Cursor fetchAllDays(long id) {     
        Cursor cursor = database.query(MySQLiteHelper.TABLE_DAYS, allColumns, MySQLiteHelper.COLUMN_ID_ROUTINE + " = " + id, null, null, null, null);
        if (cursor != null) { cursor.moveToFirst(); }
        return cursor;
    }

} 

这是我可以将所有日期及其列值检索到游标中的数据源,以在要应用于列表视图的简单游标适配器中使用。我也明白了。

DaysActivity.java:

package com.dd.gfit;

import android.app.ListActivity;
import android.database.Cursor;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.widget.SimpleCursorAdapter;

public class DaysActivity extends ListActivity {

    private DaysDataSource datasource;
    private SimpleCursorAdapter dataAdapter;

    @Override
    public void onCreate(Bundle savedInstanceState) {       
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_days);

        datasource = new DaysDataSource(this);
        datasource.open();

        Cursor cursor = datasource.fetchAllDays(routineDataID);
        String[] columns = new String[] { MySQLiteHelper.COLUMN_NAME, MySQLiteHelper.COLUMN_DAY };
        int[] to = new int[] { R.id.listitem_day_name, R.id.listitem_day_day };
        dataAdapter = new SimpleCursorAdapter(this, R.layout.listitem_day, cursor, columns, to, 0);
        setListAdapter(dataAdapter);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {     
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.activity_days, menu);
        return true;        
    }

    @Override
    protected void onListItemClick(ListView l, View v, int position, long thisID)
    {
        Day day = (Day)getListAdapter().getItem(position);
        long id = day.getId();

        Intent startDayActivity = new Intent(this, DayActivity.class);
        startDayActivity.putExtra("routineDataID", id);
        this.startActivity(startDayActivity);
    }

} 

这是我没有得到的部分。首先,列表视图完美地显示了我想要的内容。该onListItemClick()功能导致应用程序在被触发时崩溃(当我单击列表项时)。id似乎即将出现空值或什么?就像从未为列表项分配值一样。

我需要知道我在这里缺少什么。我需要有人帮助我,告诉我需要在代码中添加什么以及在哪里添加,这样我才能更好地了解将来如何正确执行此操作。

我假设我需要day在尝试使用该getId()函数之前获得应用的值?任何帮助都会很棒。

编辑:

我在列表视图中有一个按钮,我还希望能够在id单击此按钮时获取。

下面是使用我想转换为简单光标适配器的数组适配器的代码:

public void onClick(View view) {    
    @SuppressWarnings("unchecked")
    ArrayAdapter<Day> adapter = (ArrayAdapter<Day>)getListAdapter();
    ListView lv = getListView();
    int position = lv.getPositionForView(view);
    Day day = (Day) getListAdapter().getItem(position);
    long id = day.getId();
}

再次编辑:

弄清楚了。继承人的代码:

    ListView l = getListView();
    int position = l.getPositionForView(view);

    Cursor cursor = ((SimpleCursorAdapter)l.getAdapter()).getCursor();
    cursor.moveToPosition(position);
    long id = cursor.getLong(cursor.getColumnIndex(MySQLiteHelper.COLUMN_ID));
    String name = cursor.getString(cursor.getColumnIndex(MySQLiteHelper.COLUMN_NAME));
4

2 回答 2

1

更改您的onListItemClick代码以从光标中获取选定的值:

@Override
    protected void onListItemClick(ListView l, View v, int position, long thisID)
    {
      Cursor cursor = ((SimpleCursorAdapter)l.getAdapter()).getCursor();
      cursor.moveToPosition(position);
      long id = cursor.getLong(cursor.getColumnIndex("YOUR_COLUMN_NAME_HERE"));

      Intent startDayActivity = new Intent(DaysActivity.this, DayActivity.class);
      startDayActivity.putExtra("routineDataID", id);
      startActivity(startDayActivity);
    }
于 2012-12-25T06:29:08.897 回答
0

用这个:

String selectedData =(String) (l.getItemAtPosition(position));

于 2012-12-25T06:35:49.220 回答