listview中的一对多加载Android中的另一个listview

listview中的一对多加载Android中的另一个listview,android,android-listview,one-to-many,Android,Android Listview,One To Many,这个简单的应用程序的目标是建立一对多的关系,这样当用户单击列表中的一个项目时,他们会被带到另一个列表,其中的项目与单击的对象关联。 简化示例:最上面的列表包含两项:习语、短语动词。当用户单击惯用语时,它们被带到惯用语列表,当用户单击短语动词时,它们被带到短语动词列表。到达成语列表后,他们可以选择一个成语,并将其带到显示定义和示例的文本视图。 目前,主题列表惯用语和短语动词在ListView中正确显示,但当我单击其中一个时,应用程序退出,并出现许多错误,这是一个E/AndroidRuntime27

这个简单的应用程序的目标是建立一对多的关系,这样当用户单击列表中的一个项目时,他们会被带到另一个列表,其中的项目与单击的对象关联。 简化示例:最上面的列表包含两项:习语、短语动词。当用户单击惯用语时,它们被带到惯用语列表,当用户单击短语动词时,它们被带到短语动词列表。到达成语列表后,他们可以选择一个成语,并将其带到显示定义和示例的文本视图。 目前,主题列表惯用语和短语动词在ListView中正确显示,但当我单击其中一个时,应用程序退出,并出现许多错误,这是一个E/AndroidRuntime276:原因: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);

首先,我建议您将任何相关的内容放在一个数组中,如下所示:

<string-array name="idioms">
    <item>CashCow</item>
    <item>In the Black</item>
</string-array>

现在到底发生了什么?另外,在第二个类中,您要将资源中的字符串设置为列表的适配器?!?拉斐尔,谢谢你的帮助,这让我走上了正轨。我不得不去创建一个新的项目,因为以前的代码实际上还存在其他一些问题。不过,我还遇到了一个错误,那就是mListView.notifyDataSetChanged;Eclipse给了我一个错误:对于类型ListView,notifyDataSetChanged方法未定义。我不确定如何解决这个问题,如果可能,您可以提供一些建议吗?非常感谢。对不起,我弄错了。此方法属于ArrayAdapter,如果将另一个适配器设置为ListView,则不应使用此方法。如果在切换适配器后没有任何变化,请尝试调用mListView.postInvalidateRafael,我采用了不同的方法,因为我可能希望使列表更大,因此我认为最好使用intent。我已经在我原来的帖子上编辑了代码,你能看看我做错了什么吗?在我点击其中一个列表项“成语”或“短语动词”之前,一切都很顺利。有什么建议吗?舒尔我知道出了什么问题。在意图中存储一个位置,在这种情况下,值不同于[0..n]。然后,尝试获取数组getResources.getStringArrayArrayArrayArrayB;但是android可能找不到0或1的字符串数组。。。像这样尝试:int[]arrayIds=newint[]{R.id.topics,R.id.idioms,R.id.pverbs};并按如下方式获取int:getResources.getStringArrayArrayArrayId[arrayB];。也要考虑接受这个答案,因为它实际上回答了你的第一个问题。如果你有另一个问题,发布另一个问题。。。
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();
}