Android 确定从另一个类单击了哪个项

Android 确定从另一个类单击了哪个项,android,bundle,viewflipper,Android,Bundle,Viewflipper,我有一个List类和一个Viewflipper类,如何知道在Viewflipper类中的List类中单击了哪个项目,如果可能,我还想将每个视图链接到Viewflipper的特定视图。这就是我迄今为止所尝试的: 列表类: public class List extends ListActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState)

我有一个List类和一个Viewflipper类,如何知道在Viewflipper类中的List类中单击了哪个项目,如果可能,我还想将每个视图链接到Viewflipper的特定视图。这就是我迄今为止所尝试的:

列表类:

public class List extends ListActivity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // storing string resources into Array
    String[] service_list = getResources().getStringArray(R.array.List);

    // Binding resources Array to ListAdapter
    this.setListAdapter(new ArrayAdapter<String>(this, R.layout.list, R.id.list, service_list));

}

@Override
protected void onListItemClick(ListView parent, View v, int position, long id) {
    // TODO Auto-generated method stub
     String name = (String) parent.getItemAtPosition(position); 
     //Toast.makeText(this, "you have clicked " + name, Toast.LENGTH_SHORT).show();


    switch (position) {
    case 0:
        Intent i = new Intent(List.this, Viewflipper.class);
        Bundle b = new Bundle();
        b.putString("a", "apple");
        i.putExtras(b);
        startActivity(i);
        break;

    case 1:
        Intent a = new Intent(List.this, Viewflipper.class);
        Bundle aa = new Bundle();
        aa.putString("b", "banana");
        a.putExtras(aa);
        startActivity(a);

        break;

    case 2:
        Intent ab = new Intent(List.this, Viewflipper.class);
        Bundle bb = new Bundle();
        bb.putString("m", "mango");
        ab.putExtras(bb);
        startActivityForResult(ab, 2);
        break;

    case 3:
        Intent c = new Intent(List.this, Viewflipper.class);
        Bundle cc = new Bundle();
        cc.putString("o", "orange");
        c.putExtras(cc);
        startActivity(c);
         break;
    default:
        break;
    }

    super.onListItemClick(parent, v, position, id);
}
} 

请帮忙。谢谢。

首先,我建议更改
列表
代码,如下所示:

switch (position) {
Intent i = new Intent(List.this, Viewflipper.class);
case 0:
    i.putExtra ("key", "apple");
    startActivity(i);
    break;

case 1:
    i.putExtra ("key", "banana");
    startActivity(i);
    break;

case 2:
    i.putExtra ("key", "mango");
    startActivity(i);
    break;

case 3:
    i.putExtra ("key", "orange");
    startActivity(i);
    break;
default:
    break;
}
if (getIntent().hasExtra("key")) {

String extra = getIntent().getStringExtra ("key");

    if ("apple".equals (extra)){
        Toast.makeText(this, " the first Item was clicked ",
                Toast.LENGTH_LONG).show();
    } else if ("banana".equals (extra)){
        Toast.makeText(this, "the second Item was clicked",
                Toast.LENGTH_LONG).show();
    } else if  ("mango".equals (extra)){
        Toast.makeText(this, "the fourth Item was clicked",
                Toast.LENGTH_LONG).show();
    } else {
        Toast.makeText(this, "the fifth Item was clicked",
                Toast.LENGTH_LONG).show();
    }
}
然后在
Viewflipper
中,更改代码,使其如下所示:

switch (position) {
Intent i = new Intent(List.this, Viewflipper.class);
case 0:
    i.putExtra ("key", "apple");
    startActivity(i);
    break;

case 1:
    i.putExtra ("key", "banana");
    startActivity(i);
    break;

case 2:
    i.putExtra ("key", "mango");
    startActivity(i);
    break;

case 3:
    i.putExtra ("key", "orange");
    startActivity(i);
    break;
default:
    break;
}
if (getIntent().hasExtra("key")) {

String extra = getIntent().getStringExtra ("key");

    if ("apple".equals (extra)){
        Toast.makeText(this, " the first Item was clicked ",
                Toast.LENGTH_LONG).show();
    } else if ("banana".equals (extra)){
        Toast.makeText(this, "the second Item was clicked",
                Toast.LENGTH_LONG).show();
    } else if  ("mango".equals (extra)){
        Toast.makeText(this, "the fourth Item was clicked",
                Toast.LENGTH_LONG).show();
    } else {
        Toast.makeText(this, "the fifth Item was clicked",
                Toast.LENGTH_LONG).show();
    }
}
我改变的是:

  • 在开关的开头声明
    意图
    ,以保存一些代码
  • 使额外传递的密钥始终具有相同的密钥。您之前所做的(每种情况下使用一个单独的键并不能很好地工作,您可以获得NPE,这会破坏键值对的意义)
  • 删除了该捆绑包,因为它是冗余的。
    Intent#putExtra()
    Intent#getStringExtra()
    都可以
  • Did
    “string”.equals(stringVariable)
    因为
    string#equals()
    方法可以处理
    null
    值,而无需抛出
    NPE

@Brianmuks没问题!你应该试试这个,看看它是否解决了你的一些问题。我编辑了一件事(因为这一切都是从内存中完成的):
getIntent().hasExtra(“键”)
是正确的
hasExtras()
不存在。现在应用程序运行正常,没有错误。感谢您的解释,我想知道为什么我的代码不工作。@Brianmuks既然您说您的应用程序现在运行正常,您应该将此答案标记为已接受,以便将来的访问者可以轻松查看对您有用的内容。