1

これについてはすでに100万のトピックがあることは知っていますが、聞いてください。

タイトルにはすべてが書かれています。スピナー1でアイテムを選択すると、スピナー2は特定の選択肢のリストを取得します(これは情報を表示するために使用されます)。それは本質的に小さなコンタクトブックです。

*更新** すべてが修正されて機能しています。FishTruckを使用して(つまり、機能させるために)特別に感謝します。

package com.your.package.name;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;

public class Contact extends Activity{

        public Spinner spinner1, spinner2;
        public Button btnSubmit;//not needed yet

        @Override
        public void onCreate(Bundle savedInstanceState){
                super.onCreate(savedInstanceState);

                setContentView(R.layout.contact);
                findViews();
                addItemsOnSpinner1();
                addItemsOnSpinner2(0);
        }

        private void findViews(){
                spinner1 = (Spinner) findViewById(R.id.spinner1);
                spinner2 = (Spinner) findViewById(R.id.spinner2);
        }

        private void addItemsOnSpinner1() {
                List<String> list = new ArrayList<String>();

                list.add("Please Select");
                list.add("Choice 1");
                list.add("choice 2");

                ArrayAdapter<String> name = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list);  

                name.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

                spinner1.setAdapter(name);
                spinner1.setOnItemSelectedListener(new OnItemSelectedListener(){
                        @Override
                        public void onItemSelected(AdapterView<?> arg0, View arg1,int arg2, long arg3) {
                                if(arg2>0)
                                addItemsOnSpinner2(arg2);
                        }
                        @Override
                        public void onNothingSelected(AdapterView<?> arg0) {
                                addItemsOnSpinner2(0);
                        }}
                );
        }

        private void addItemsOnSpinner2(int selectedIndex) {

                int positionTop = selectedIndex;

                if(positionTop==0){
                        List<String> list = new ArrayList<String>();
                        list.add("Please Select");
                        ArrayAdapter<String> name0 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list);
                        name0.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                        spinner2.setAdapter(name0);
                }else if(positionTop==1){
                        List<String> list1 = new ArrayList<String>();
                        list1.add("Please Select");
                        list1.add("item 1");
                        list1.add("item 2");
                        ArrayAdapter<String> name1 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list1);
                        name1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                        spinner2.setAdapter(name1);
                }else if(positionTop==2){
                        List<String> list2 = new ArrayList<String>();
                        list2.add("Please Select");
                        list2.add("item 3");
                        list2.add("item 4");
                        ArrayAdapter<String> name2 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list2);
                        name2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                        spinner2.setAdapter(name2);
                }
        }

}

お役に立てれば!

4

3 に答える 3

1

addItemsOnSpinner2()最初のスピナーアイテムが選択されたら、関数を呼び出す必要があります。

public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
    long arg3) {
addItemsOnSpinner2();}
于 2013-03-14T14:32:56.167 に答える
0

コードの先頭(onCreate内)で両方のスピナーを設定しています。spinner1データが変更された後、2番目のスピナーにデータを入力する必要があります

于 2013-03-14T14:31:17.787 に答える
0

はい、私の前の紳士が言ったように。

2番目のスピナーがリストを設定するための正しいインデックスを取得するために、

最初のスピナーがクリックされた後にそれを投入する必要があります。

/*間違った答えが削除されました*/

これが私のコードである場合、addItemsOnSpinner2()を次のように変更します。

private void addItemsOnSpinner2(int selectedIndex){
    int positionTop = selectedIndex;
    //rest is the same
    /* ... */
}

そして、これらをaddItemsOnSpinner1()に再度挿入します。

spinner1.setOnItemSelectedListener(new OnItemSelectedListener(){
        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1,int arg2, long arg3) {
            if(arg2>0)
            addItemsOnSpinner2(arg2);
        }
        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            addItemsOnSpinner2(0);
        }}
    );

それは私がそれをする方法です

私はここで多くの方法が機能すると思います

edit2:ohそしてonCreate()のaddItemsOnSpinner2()をaddItemsOnSpinner2(0)に編集します

edit3:onCreate()でaddItemsOnSpinner2()を呼び出す必要があります。そうしないと、スピナーが空になります。

edit4:すみません、私はonItemClickListenerがここに適用できると考えることに大きな間違いを犯しました、私に恥をかかせます:((

ところで、インデックスを保持したい場合(画面の向きを変更したり、前景に戻したりするような状況で)、より複雑な作業が必要になります

しかし、これははるかに簡単な方法です。

1.グローバル静的変数を設定します:int selectedIndex;

2. onCreateで、savedInstanceStateがnullの場合、selectedIndexを0に設定します

3. onCreateで、savedInstanceStateがnullチェックされた後、addItemsOnSpinner2(selectedIndex)を呼び出します

4.スピナー1のリスナーで、selectedIndexを選択したインデックスに設定します。

ただし、すべてのマシンで動作することは保証されていません:(

于 2013-03-14T14:41:49.510 に答える