Android 确定从另一个类单击了哪个项
我有一个List类和一个Viewflipper类,如何知道在Viewflipper类中的List类中单击了哪个项目,如果可能,我还想将每个视图链接到Viewflipper的特定视图。这就是我迄今为止所尝试的: 列表类: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)
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
getIntent().hasExtra(“键”)
是正确的hasExtras()
不存在。现在应用程序运行正常,没有错误。感谢您的解释,我想知道为什么我的代码不工作。@Brianmuks既然您说您的应用程序现在运行正常,您应该将此答案标记为已接受,以便将来的访问者可以轻松查看对您有用的内容。