简单应用程序的目标是建立一对多关系,以便当用户单击列表中的一个项目时,它们将被带到另一个列表,其中包含与所单击对象关联的项目。 简化示例:热门列表有两个项目:成语,短语动词。当用户点击成语时,他们会被带到一个成语列表中,当用户点击Phrasal Verbs时,他们会被带到短语动词列表中。在到达成语列表后,他们可以选择一个成语,并将它们带到显示定义和示例的文本视图。 目前,主题列表(Idioms和Phrasal Verbs)在ListView中正确显示,但是当我点击其中一个时,应用程序退出并且我收到很多错误,这是一个(E / AndroidRuntime(276):引起:android。 content.res.Resources $ NotFoundException:字符串数组资源ID#0x0) 如何获得与我单击的列表项关联的一对多?我的意图是否正确?
<string-array name="topics">
<item>Idioms</item>
<item>Phrasal Verbs</item>
<string-array name="idioms">
<item>Cash Chow</item>
<item>In the Black</item>
</string-array>
<string-array name="pverbs">
<item>Back up</item>
<item>Back down</item>
</string-array>
主活动文件如下所示,它在模拟器中正确显示。
public class TestActivity extends ListActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String[] topics = getResources().getStringArray(R.array.topics);
setListAdapter(new ArrayAdapter<String>(this, R.layout.topic_list, topics));
ListView lv = getListView();
lv.setTextFilterEnabled(true);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
//@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
Intent i = new Intent(TestActivity.this, Sublist.class);
i.putExtra("position", position);
startActivity(i);
我创建的第二个类名为Sublist,这是我的代码。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle extras = getIntent().getExtras();
int arrayB = extras.getInt("position");
String[] subtopics = getResources().getStringArray(arrayB);
setListAdapter(new ArrayAdapter<String>(this, R.layout.topic_list, subtopics));
ListView lv = getListView();
lv.setTextFilterEnabled(true);
答案 0 :(得分:0)
首先我建议你把任何相关的东西放在一个像这样的数组中:
<string-array name="idioms">
<item>CashCow</item>
<item>In the Black</item>
</string-array>
之后,您可以使列表显示正常。在OnClick
中,您可以使用相同的适配器,但更新他的数据。
public void onItemClick(AdapterView arg0, View arg1, int position, long arg3) {
int textId = R.id.YOUR_TEXTVIEW_ID;
String[] data;
switch (position) {
case 0:
data = getResources().getStringArray(R.id.idioms);
break;
case 1:
data = getResources().getStringArray(R.id.phrasal_verbs);
break;
default:
data = someFallback;
break;
}
ArrayAdapter<String> aa = new ArrayAdapter<String>(this, textId, data);
mListView.setAdapter(aa);
mListView.postInvalidate();
}