Android:列表视图数据没有被传递到另一个活动

问题描述:

我已经做了一个listview并从数据库充值它。我已经建立了使用onclicklistener上ListView项:Android:列表视图数据没有被传递到另一个活动

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_books); 
    listView = (ListView) findViewById(R.id.listView); 
    call=(Button)findViewById(R.id.call); 
    userDbHelper = new UserDbHelper(getApplicationContext()); 
    sqLiteDatabase = userDbHelper.getReadableDatabase(); 
    cursor = userDbHelper.getInformation(sqLiteDatabase); 
    listDataAdapter = new ListDataAdapter(getApplicationContext(), R.layout.row_layout); 
    final TextView txt=(TextView) findViewById(R.id.pr); 
    listView.setAdapter(listDataAdapter); 
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
      Intent in=new Intent(Books.this,List1.class); 
      TextView txt=(TextView)findViewById(R.id.pr); 
      String getPrice=txt.getText().toString(); 
      in.putExtra("getPrice",getPrice); 
      startActivity(in); 
     } 
    }); 

    if (cursor.moveToFirst()) { 
     do { 
      id = cursor.getInt(0); 
      category = cursor.getString(1); 
      name = cursor.getString(2); 
      phone = cursor.getString(3); 
      price = cursor.getString(4); 
      desc = cursor.getString(5); 
      photo = cursor.getBlob(6); 

      //Bitmap bmp = BitmapFactory.decodeByteArray(photo, 0, photo.length); 
      DataProvider dataProvider = new DataProvider(id,category, name, phone, price, desc, photo); 
      listDataAdapter.add(dataProvider); 
     } while (cursor.moveToNext()); 
    } 
} 

List1.class我试图从数据库中检索其列表视图中点击ID,这样我就可以根据该充气其他布局。如何做呢?
List1.class

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_list1); 
     TextView txt=(TextView)findViewById(R.id.pr); 
     String getPrice=txt.getText().toString(); 
     userDbHelper = new UserDbHelper(getApplicationContext()); 
     sqLiteDatabase = userDbHelper.getReadableDatabase(); 
     ImageView img1=(ImageView)findViewById(R.id.image2); 
     Intent in=getIntent(); 
     Cursor cursor=userDbHelper.getContact(getPrice,sqLiteDatabase); 
     if(cursor.moveToFirst()) 
     { 
      String NAME=cursor.getString(0); 
      String PHONE=cursor.getString(1); 
      String DESC=cursor.getString(2); 
      byte[] PHOTO=cursor.getBlob(3); 
      Bitmap bmp = BitmapFactory.decodeByteArray(photo, 0, photo.length); 
      img1.setImageBitmap(bmp); 
     } 
    userDbHelper=new UserDbHelper(getApplicationContext()); 
    sqLiteDatabase=userDbHelper.getReadableDatabase(); 
     price1=(TextView)findViewById(R.id.Price); 

} 
+0

然后你需要在你的'onClickListener'开始活动时传递一个值。然后检索该值以交给您的DB代码。如果我正确理解你。 – andre3wap

+0

我没有看到你在开始你的意图时通过了什么值。 – andre3wap

+0

尝试'intent.putExtra'也检索id与 –

设置ListView控件ID /位置传递:

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 

     Intent in=new Intent(Books.this,List1.class); 
     ///String text = (String) lv.getItemAtPosition(i); //Or you can get the text for the List item you clicked on. 
     in.putExtra("ID_VAR", i); /// ID clicked 
     startActivity(in); 
    } 
}); 

获取数据在你onCreate

Intent mIntent = getIntent(); 
int intValue = mIntent.getIntExtra("ID_VAR", 0); 
System.out.println("Debugging:" + intValue); ///Debugging 
+0

是的它的工作'List1.class'布局被打开,但仍然没有设置相应的图像。 :/ –

+0

我不知道你是什么意思的“对应的图像” - 我以为你正在试图获得点击列表项值>传递给'List1',并用它来获得相应的数据/膨胀其他布局基于价值 – andre3wap

+0

是的,这就是我想..在ListView中有一个图像也..并在第二个布局没有数据设置。 –

开始的意图不添加数据本身。你必须明确地将数据添加到意图中。 这可以通过putExtra方法完成。该方法首先需要两个参数,一个是通常是关键字的字符串。您将使用此键检索数据。其他参数是一个值,可以是字符串,整型,长整型,布尔型等。 以下是一个值为字符串类型的示例。

in.putExtra("key","value"); 

在你的情况。在onItemClick方法提取的联系对象,并通过它的数据与意图一起类似

in.putExtra("id",contact.getId()); 

而且在List1活动在onCreate方法,你可以得到类似下面的

Intent in = getIntent(); 
int id = in.getIntExtra("id",-1); 

这里的ID -1是默认值。另外请注意,我们使用的是用于将数据放入意图的同一个密钥,同时检索它是“id”。然后你可以从数据库中查询数据。