-1

戻るボタンを適切に実装するのに問題があります。私が見たすべてのコード スニペットは、私にとってはうまくいきませんでした。戻るボタンを押したときにやろうとしていることは、前のリストに戻ることです。ほとんどの場合、リスト内にリストがあり、前のリストに戻りたいだけです。どうすればこれを行うことができますか?これは私が持っているリストです。すべてのアイテムには個別のリストがあります。武器をクリックすると、さまざまな武器タイプのリストが表示されます。

final String[] weapons = getResources().getStringArray(R.array.weapons);
                setListAdapter(new ArrayAdapter<String>(ffxidirectory.this, R.layout.list_item, weapons));
                lv.setOnItemClickListener(new OnItemClickListener() 
                {
                    public void onItemClick(AdapterView<?> parent, View view,
                            int position, long id) 
                    {
                        System.out.println("item clicked: "+weapons[position]);
                        switch(position)
                        {
                            case 0:
                                final String[] axes = getResources().getStringArray(R.array.axes);
                                setListAdapter(new ArrayAdapter<String>(ffxidirectory.this, R.layout.list_item, axes));
                                break;
                            case 1:
                                final String[] clubs = getResources().getStringArray(R.array.clubs);
                                setListAdapter(new ArrayAdapter<String>(ffxidirectory.this, R.layout.list_item, clubs));
                                break;
                            case 2:
                                final String[] daggers = getResources().getStringArray(R.array.daggers);
                                setListAdapter(new ArrayAdapter<String>(ffxidirectory.this, R.layout.list_item, daggers));
                                break;
                            case 3:
                                final String[] great_axes = getResources().getStringArray(R.array.great_axes);
                                setListAdapter(new ArrayAdapter<String>(ffxidirectory.this, R.layout.list_item, great_axes));
                                break;
                            case 4:
                                final String[] great_katana = getResources().getStringArray(R.array.great_katana);
                                setListAdapter(new ArrayAdapter<String>(ffxidirectory.this, R.layout.list_item, great_katana));
                                break;
                            case 5:
                                final String[] great_swords = getResources().getStringArray(R.array.great_swords);
                                setListAdapter(new ArrayAdapter<String>(ffxidirectory.this, R.layout.list_item, great_swords));
                                break;
                            case 6:
                                final String[] hand_to_hand = getResources().getStringArray(R.array.hand_to_hand);
                                setListAdapter(new ArrayAdapter<String>(ffxidirectory.this, R.layout.list_item, hand_to_hand));
                                break;
                            case 7:
                                final String[] katana = getResources().getStringArray(R.array.katana);
                                setListAdapter(new ArrayAdapter<String>(ffxidirectory.this, R.layout.list_item, katana));
                                break;
                            case 8:
                                final String[] polearms = getResources().getStringArray(R.array.polearms);
                                setListAdapter(new ArrayAdapter<String>(ffxidirectory.this, R.layout.list_item, polearms));
                                break;
                            case 9:
                                final String[] scythes = getResources().getStringArray(R.array.scythes);
                                setListAdapter(new ArrayAdapter<String>(ffxidirectory.this, R.layout.list_item, scythes));
                                break;
                            case 10:
                                final String[] staves = getResources().getStringArray(R.array.staves);
                                setListAdapter(new ArrayAdapter<String>(ffxidirectory.this, R.layout.list_item, staves));
                                break;
                            case 11:
                                final String[] swords = getResources().getStringArray(R.array.swords);
                                setListAdapter(new ArrayAdapter<String>(ffxidirectory.this, R.layout.list_item, swords));
                                break;
                        }
                    }
                });
4

2 に答える 2

0

戻るボタンをオーバーライドして、ListView に渡された前のアダプターをロードしたい場合...
以前のアダプターの選択を格納するクラス変数を作成することをお勧めします。

List<Integer> previousAdapters = new ArrayList<Integer>();

onItemClick()インデックスを保存して新しいメソッドを呼び出すように書き直します。

public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    previousAdapters.add(position);
    changeAdapter(position);
}

switch-statement を次の場所に移動しますchangeAdapter()

public void changeAdapter(int position) {
    switch(position)
    {
    case 0:
        final String[] axes = getResources().getStringArray(R.array.axes);
        setListAdapter(new ArrayAdapter<String>(ffxidirectory.this, R.layout.list_item, axes));
        break;
    case 1:
        final String[] clubs = getResources().getStringArray(R.array.clubs);
        setListAdapter(new ArrayAdapter<String>(ffxidirectory.this, R.layout.list_item, clubs));
        break;
    // etc
    }
}

onBackPressed()そして、次のようにオーバーライドします。

public void onBackPressed() {
    if(previousAdapters.size() > 1)
        changeAdapter(previousAdapters.remove(previousAdapters.size() - 2));
    else
        super.onBackPressed();
}

また、呼び出されるたびにリソース配列を再作成する必要はありませんchangeAdapter()。で初期化する必要がありますonCreate()

于 2012-11-10T22:58:02.650 に答える
0

このコードを試してください

 @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        moveTaskToBack(true);
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

onBackPressed メソッドをオーバーライドすることで、Android 2.0 以降でも実行できます。

@Override
public void onBackPressed(){
//do whatever you want the back button to do
}
于 2012-11-10T22:58:19.567 に答える