ListView contentview从外部xml文件更改

时间:2012-04-29 22:24:22

标签: android listview resources listitem

这就是我想要做的。 我有一个listview,它是从保存在/values/menu.xml

中的xml资源文件填充的

它中包含以下代码:

<?xml version="1.0" encoding="utf-8"?>
<resources>
 <string-array name="menuchoices">
     <item name="pv">Present Value</item>
     <item name="fv">Future Value</item>
     <item name="bond">Bond Pricing</item>
 </string-array>   
</resources>

到目前为止这么简单。然后我的Main.java文件看起来像这样:(改编自其他listview问题)

public class Main extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    ListView lv = (ListView) findViewById(R.id.listView1);
    lv.setAdapter(new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1,
            getResources().getStringArray(R.array.menuchoices)
            ));


}

public void onListItemClick(ListView partent, View v, int position, long id) {
   if ("pv".equals(getResources().getStringArray(R.array.menuchoices)[position])){
       setContentView(R.layout.presentvalue);
   }
   }       
}

基本上我读到,一直发布新活动并不是最好的做法所以我只是告诉if语句来改变contentview。问题是 - 当我点击列表中的第一项时没有任何反应。我也尝试用“现值”代替“pv”,但它也没有帮助。

我认为这是我的尝试,我从这里的帖子List View selection to start a new Activity获取了代码,但我不知道如何更改它以便它可以与外部xml资源文件一起使用。

这应该是一个简单的解决方法吗?

提前谢谢

最高

P.S。所有其他的东西都有效(presentvalue.xml文件在布局文件夹中,当我运行应用程序时列表正确显示)

编辑//

这是有问题的一行

public void onListItemClick(ListView parent, View v, int position, long id) {
   if (view.getText().toString().equals("Present Value")){
       startActivity(new Intent(Main.this, PresentValue.class));
   }
   } 

1 个答案:

答案 0 :(得分:1)

函数onListItemClick()通常与ListActivity一起使用。有几个修复:

    • 将行extends Activity更改为extends ListActivity
    • 删除ListView定义。
    • 将您的main.xml ID从@+id/listView1更改为@android:id/list
    • implements OnItemClickListener
    • 之后在您的班级定义中添加extends Activity
    • 将功能onListItemClick更改为onItemClick
  1. 尝试移动menuchoices块:

     <string-array name="menuchoices">
         <item name="pv">Present Value</item>
         <item name="fv">Future Value</item>
         <item name="bond">Bond Pricing</item>
     </string-array>   
    

    在您的string.xml文件中,我们可以简化您的适配器(假设您上面做了更改#1):

    setListAdapter(new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1,
            R.array.menuchoices));
    

    我们还可以浓缩您测试菜单选项的方式:

    "pv".equals(getResources().getStringArray(R.array.menuchoices)[position])
    

    变为:

    view.getText().toString().equals("Present Value");
    

    (小点,“父母”一词中有拼写错误)

    怎么样?