从Listview onItemClickListener发送Intent错误

时间:2013-12-30 10:15:28

标签: android listview android-intent

只是一个简单的问题,我猜我错过了一些非常容易和明显的东西。访问listview项时调用以下代码,并将id传递给下一个activity。我收到运行时错误,log cat正在向我显示

error:java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tim.apps.list/com.tim.apps.list.Challengeview}: java.lang.NumberFormatException: Invalid int: "null" 

这是我第一次活动的代码:

ListView lv = getListView();
   lv.setOnItemClickListener(new OnItemClickListener()
   {
      @Override
      public void onItemClick(AdapterView<?> adapter, View v, int position,
            long arg3) 
      {
            String index = (String)adapter.getItemAtPosition(position); 
            //Intent myIntent = new Intent(ChallengesList.this, Challengeview.class);
            //ChallengesList.this.startActivity(myIntent);
            Intent i = new Intent(getApplicationContext(), Challengeview.class);
            i.putExtra(index, position);
            startActivity(i);
      }
   });

在我的第二次活动中..

Bundle extras = getIntent().getExtras();
String value = extras.getString("index");

//Convert the passed id to a integer
int intvalue = Integer.parseInt(value);

非常感谢大家给予的任何帮助!

3 个答案:

答案 0 :(得分:1)

您将项目数据作为,并且您正在使用密钥"index"

检索数据

更改

Intent i = new Intent(getApplicationContext(), Challengeview.class);
i.putExtra(index, position);

Intent i = new Intent(getApplicationContext(), Challengeview.class);
i.putExtra("index", position);

在检索时,提供相同的密钥"index"以获取数据..

Bundle extras = getIntent().getExtras();
if (extras != null) {
    String value = extras.getString("index");
    // Convert the passed id to a integer
    int intvalue = Integer.parseInt(value);
}

答案 1 :(得分:0)

问题是您在每项活动中使用不同的密钥:

String index = (String) adapter.getItemAtPosition(position);

将返回项目的字符串表示形式。 那么你对自己的意图是:ItemString - &gt;位置 你想要的是:“index” - &gt;位置

答案 2 :(得分:0)

你两端都做错了(发送/接收)。你可以使用它作为i.putExtra(String,String)。在你的情况下,如果你想接收String,那么你只需要发送字符串,因为我正在添加“”到位置。

 Intent i = new Intent(getApplicationContext(), Challengeview.class);
        i.putExtra("index", ""+position);
        startActivity(i);

在接收端你必须这样做。

String value =getIntent().getStringExtras("index");