将所选项从ListView Android传递到另一个Activity时,在加载新活动时会抛出NullPointerException

时间:2014-04-04 12:51:02

标签: java android listview android-listview

我是Android开发新手,我正在尝试使用模拟应用程序以便更好地学习。在它的当前状态下它有一个包含元素的ListView,但是我想要做的是点击ListView项目打开一个新活动并将文本传递给新活动中的TextView小部件。

到目前为止,我一直在这样做。

listView.setOnItemClickListener(new OnItemClickListener()
    {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                long id) {
            // TODO Auto-generated method stub
            TextView locName =  (TextView) view.findViewById(R.id.txtTitle);
            String locValue = locName.getText().toString();
            Toast.makeText(MainActivity.this, locValue, Toast.LENGTH_LONG);

            Intent intent = new Intent(MainActivity.this, PaymentDetail.class);
            intent.putExtra("location", locValue);
            startActivity(intent);

        }

    });

onCreate for my second activity

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);     
    setContentView(R.layout.payment_detail);
    TextView locTitle = (TextView)findViewById(R.id.locationName);

    Intent intent = getIntent();
    String value = intent.getStringExtra("location");
    locTitle.setText(value);
    Toast.makeText(PaymentDetail.this, value, Toast.LENGTH_LONG);


}

这两个活动都在Manifest中定义,但是我不知道为什么会出现这个NPE。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

我做了一个带有一系列水果的示例应用

对于MainActivity

listView.setOnItemClickListener(new ListView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            String fruit = String.valueOf(adapterView.getItemAtPosition(i));
            Toast.makeText(MainActivity.this, fruit, Toast.LENGTH_LONG).show();

            Intent intent = new Intent(MainActivity.this, SecondActivity.class);
            intent.putExtra("fruit", fruit);
            startActivity(intent);
        }
    });

对于SecondActivity

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_second);

    TextView fruitName = (TextView)findViewById(R.id.myTextView);

    Intent intent = getIntent();
    String fruit = intent.getStringExtra("fruit");
    fruitName.setText(fruit);
    Toast.makeText(SecondActivity.this, fruit, Toast.LENGTH_LONG).show();
}

因此,不要使用getText()方法,而是尝试将项目放在适配器的位置并将其存储到String。

希望得到这个帮助。

答案 1 :(得分:-1)

检查吐司信息是否正在打印。因为您正在单击列表项。如果您使用自定义行,那么它将是一个布局。您必须遍历布局并传递值。否则,如果您使用的是Android列表项,则必须使用您单击的位置值从集合中获取字符串。