我有两项活动。首先,我列出了一个带有ListView
的项目列表。在第二个,我想要列出一个项目列表,但其内容将取决于在第一个Activitу
中按下的元素的位置。以下是第一个ListView
活动的代码:
public class ListView1 extends Activity implements OnClickListener {
private ListView lv1;
private String cats[];
//some code
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list);
Bundle bundle = getIntent().getExtras();
final String category = bundle.getString("category");
lv1 = (ListView) findViewById(R.id.listView);
ArrayAdapter<CharSequence> adapter = ArrayAdapter
.createFromResource(this, R.array.first_list,
R.layout.list_items);
lv1.setAdapter(adapter);
cats = getResources().getStringArray(R.array.first_list);
lv1.setTextFilterEnabled(true);
lv1.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> a, View v, int position,
long id) {
String defStrID = new Integer(position).toString();
Intent intent = new Intent();
intent.setClass(ListView1.this, ListView2.class);
Bundle b = new Bundle();
b.putString("defStrID", defStrID);
intent.putExtras(b);
startActivity(intent);
}
});
}
}
这是获取列表中元素位置的代码:
String defStrID = new Integer(position).toString();
我在第二个ListView
中使用:
Bundle bundle = getIntent().getExtras();
String elementID = bundle.getString("defStrID");
我在arrays.xml
中为第二个ListView
添加了一些数组。例如:
R.array.category1
R.array.category2
R.array.category3
R.array.category4
或像这样的数组(它不是很重要):
String category1[] = { //some items here }
String category2[] = { //some items here }
etc.
例如,只有少数数组,实际上更多,所以我不想使用if else
构造。如何做到另一种方式,我不知道。除上述情况外,第二个ListView
活动与第一个public class List2 extends ListActivity {
private ListView lv1;
private String category1[] = {"Name1", "Name2"};
private String category2[] = {"Surname1", "Surname2"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle bundle = getIntent().getExtras();
;
String elementID = bundle.getString("defStrID");
String arrayName = "category" + elementID;
int id = getResources().getIdentifier(arrayName, "array",
this.getPackageName());
Log.v("LOOK_FOR_ME", "category" + " and the id i got is " + id);
String[] stats = getResources().getStringArray(id);
lv1.setAdapter(new ArrayAdapter<String>(this, R.layout.list_items,
stats));
}
}
活动相同。
第二项活动:
{{1}}
答案 0 :(得分:1)
在您的第二个Activity
中获取其他活动的ID:
Bundle bundle = getIntent().getExtras();
String elementID = bundle.getString("defStrID");
如果数组的名称为categoryX
(x -number),则构建一个带有数组名称的String:
String arrayName = "category" + elementID;
然后你可以得到这个特定数组的id:
int id = getResources().getIdentifier(arrayName, "array", getPackageName());
最后获取String
数组并将其放入适配器中:
String[] stats = getResources().getStringArray(id);
另请注意,列表中的位置始于0
,因此请将您的数组命名为0
;