0

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

1 回答 1

0

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

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

之后你让你的列表正常显示。然后OnClick你可以使用同一个Adapter,但是更新他的数据。

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();
}
于 2012-04-23T14:05:08.507 回答