Android 将数据从 SQLite 数据库加载到下一个活动中



我有一个从SQLite数据库加载数据的listView,现在我想在列表中实现一个onclicklistener。当用户单击列表时,它应将他们带到下一个活动,并将相应的数据加载到 TextView 中。我的问题是我将如何传递列表的数据,例如它是"主题"列表,用户单击主题"我的家"。我想将主题"我的家"传递给下一个活动,以便我知道要分别检索哪些相应的数据。

我该怎么做?我是否将额外内容"放入"新意图?或者还有另一种方法。以下是显示列表视图的代码的一部分:

ListView listContent = (ListView) findViewById(R.id.contentlist);
        mySQLiteAdapter = new SQLiteAdapter(this);
        mySQLiteAdapter.openToRead();
        Cursor cursor = mySQLiteAdapter.queueAll();
        startManagingCursor(cursor);
        String[] from = new String[] { SQLiteAdapter.KEY_CONTENT };
        int[] to = new int[] { R.id.text };
        SimpleCursorAdapter cursorAdapter = new SimpleCursorAdapter(this, R.layout.listrow, cursor, from, to);
        listContent.setAdapter(cursorAdapter);
        mySQLiteAdapter.close();
        //Onclick ListView setlistener
        listContent.setTextFilterEnabled(true);
        listContent.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                Intent summaryIntent = new Intent(DocumentListActivity.this, ViewDocumentActivity.class);
//              summaryIntent.putExtra("SummTopic", value);
            }
        });

编辑:这部分在下一个活动中。

Intent i = getIntent();
        extraTopic = i.getStringExtra("SummTopic");
        mydb = openOrCreateDatabase(DBNAME, Context.MODE_PRIVATE,null);
        Cursor allrows  = mydb.rawQuery("SELECT * FROM "+  TABLE + " WHERE topic = " " + extraTopic + " " " , null);
        Integer cindex = allrows.getColumnIndex("topic");
        Integer cindex1 = allrows.getColumnIndex("text1");
        Integer cindex2 = allrows.getColumnIndex("text2");

从数据库检索时出现错误:

android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 0

请帮忙。

谢谢。

        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            Intent summaryIntent = new Intent(DocumentListActivity.this, ViewDocumentActivity.class);
            Cursor c = (Cursor)parent.getItemAtPosition(position);
            summaryIntent.putExtra("SummTopic", c.getString(c.getColumnIndex(SQLiteAdapter.KEY_CONTENT)));
            startActivity(summaryIntent);
        }

或者您可以传递此行的idsummaryIntent.putExtra("SummTopicId", id); ),并在具有此 id 的下一个主题活动中"询问数据库"

编辑:

protected void onCreate(Bundle savedInstanceState){
    Intent i = getIntent(); 
    String extraTopic = i.getStringExtra("SummTopic"); 
    //or long extraTopic = i.getLongExtra("SummTopic"); if you put id there (which is better)
        mydb = openOrCreateDatabase(DBNAME, Context.MODE_PRIVATE,null);
    String[] args = new String[] { extraTopic };
    //or String[] args = new String[] { Long.toString(extraTopic) }; with id version
        Cursor singleRow  = mydb.rawQuery("SELECT * FROM "+  TABLE + " WHERE topic=?" , args);
    //args is better then escaping special chars in query
    //and it should be single row so we've changed var name :)
    if(singleRow.moveToFirst()){ //we should do moveToFirst before we can use Cursor
        Integer cindex = allrows.getColumnIndex("topic");
        Integer cindex1 = allrows.getColumnIndex("text1");
        Integer cindex2 = allrows.getColumnIndex("text2");
        //setup views and stuff ....
    }else{
        Toast.makeText(this, "Oops we did not find topic, detail activity was closed", Toast.LENGTH_SHORT).show();
        finish();
    }
}

使用setContentView(...)后,您需要引用字符串并获取文本,例如...

EditText et = (EditText) findViewById(R.id.my_edit_text);
String theText = et.getText().toString();

要将其传递给另一个活动,请使用 Intent。例。。。

Intent i = new Intent(this, MyNewActivity.class);
i.putExtra("text_label", theText);
startActivity(i);

在新的活动 ( in onCreate() ) 中,您可以获取意图并检索字符串...

public class MyNewActivity extends Activity {
    String uriString;
    @Override
    protected void onCreate(...) {
        ...
        Intent i = getIntent();
        uriString = i.getStringExtra("text_label");
    }
}

编辑:

要从列表视图中获取字符串,您可以应用以下代码并获取 ITEM 字符串并将其传递给下一个活动:

 listContent.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
    String ITEM=listContent.getItemAtPosition(position);
                //Intent summaryIntent = new Intent(DocumentListActivity.this, // ViewDocumentActivity.class);
//              summaryIntent.putExtra("SummTopic", value);
            }
        });

您可以使用 Intent 来实现此目的。

Intent intent= new Intent(context,classname.class);
intent.putExtra("name",string);

您可以使用 intent.getextra() 在目标类名中获取它。

我猜您正在使用适配器来填充一些数据。所以你需要在你的适配器中覆盖getItem(int position)方法:

 @Override
    public Object getItem(int position) {
       //Note that return type should be the same you you use to initilise items oof the adapter. E.g. String or some custom Topic class
       Object someObject = mObjects[position];
       return someObject;    
    }

然后你需要设置一个项目点击侦听器到你的列表

mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Object someObject = adapterView.getItemAtPosition(i);
                Intent i = new Intent(this, MyNewActivity.class);
                i.putExtra("text_label", someObject.toString());
                startActivity(i);
            }
        });

最新更新