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 ステートメントに contentview を変更するように指示しました。問題は、リストの最初の項目をクリックしても何も起こらないことです。「pv」を「現在価値」に置き換えてみましたが、どちらも役に立ちませんでした。

これは、このような投稿からコードを取得したためだと思います。ここではList View selection to start a new 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 Activity行をに変更しextends ListActivityます。
    • ListView定義を削除します。
    • main.xmlIDをから@+id/listView1に変更します@android:id/list
    • implements OnItemClickListener後にクラス定義を追加しますextends Activity
    • onListItemClick関数をに変更しますonItemClick

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 に答える