0

这就是我想要做的。我有一个从 /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 文件如下所示:(改编自此处的其他列表视图问题)

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 语句来更改内容视图。问题是——当我点击列表中的第一项时没有任何反应。我也尝试用“Present Value”代替“pv”,但它也没有帮助。

我认为这是因为我从这里的List View selection 之类的帖子中获取代码以启动新的 Activity)但我不知道如何更改它,以便它与外部 xml 资源文件一起使用。

这应该是一个简单的修复吧?

提前致谢

最大限度

Ps 所有其他东西都有效(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));
   }
   } 
4

1 回答 1

1

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

    • 将行更改extends Activityextends ListActivity
    • 删除您的 ListView 定义。
    • 将您的 main.xml id 从更改@+id/listView1@android:id/list
    • 之后添加implements OnItemClickListener你的类定义extends Activity
    • 将函数更改onListItemClickonItemClick

尝试移动你的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");

(小点,你在“父母”这个词中有错字)

怎么样?

于 2012-04-29T22:40:02.343 回答