2016-07-24 8 views
-2

メソッドonItemSelectedは機能しません。理由はわかりません。メソッド "onItemSelected"は配列アダプターでも、フラグメント内でも機能しません

以下は私のコードです。

アレイアダプタ:

public class MyListAdapter extends ArrayAdapter { 
    Spinner spinner; 
    ListView listView; 

    /*public MyListAdapter(Context context, int textViewResourceId) { 
     super(context, textViewResourceId); 
    }*/ 

    public MyListAdapter(Context context) { 
     super(context, R.layout.single_listview_item); 
    } 




    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View row = convertView; 

     spinner = (Spinner) convertView.findViewById(R.id.simpleSpinner); 
     ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
       getContext(), 
       R.array.country_arrays, 
       android.R.layout.simple_spinner_item); 
     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     spinner.setAdapter(adapter); 
     System.out.println("ciao1"); 

     // spinner.setOnItemSelectedListener(this); 

     return row; 
    } 



    /* @Override 
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
     String selState = (String) spinner.getSelectedItem(); 
     System.out.println(selState); 
     Toast.makeText(
       getContext(), 
       "Clicked on Planet: " + selState + "", Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onNothingSelected(AdapterView<?> parent) { 

    }*/ 

    } 

フラグメント:あなたはonItemClickedを使用するリストビューで

ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_list2, container, false); 
     listView = (ListView) rootView.findViewById(R.id.listview); 
     ListAdapter listAdapter = new MyListAdapter(getContext()); 
     listView.setAdapter(listAdapter); 
//  listView.setOnItemClickListener(this); 
     listView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() 
     { 
      public void onItemSelected(AdapterView<?> parent, View view, int position, long i) 
      { 
       listView.setSelection(position); 
       String selState = (String) listView.getSelectedItem(); 
       Toast.makeText(
         getContext(), 
         "Clicked on Planet: " + selState + "", Toast.LENGTH_SHORT).show(); 

      } 

      @Override 
      public void onNothingSelected(AdapterView<?> arg0) { 
       // TODO Auto-generated method stub 

      } 
     }); 

答えて

0

。 OnItemSelectedはスピナーのためのものです。それはArrayAdapterOnItemSelectedListener(this)を設定するあなたの方法では、これらのAndroid迷惑の1 ...

+0

私は方法を使用する必要があります。アレイアダプターまたはフラグメント? –

+0

どのように私はスピナーのリストにオブジェクトの名前を取るコードを記述する必要がありますか? –

+0

私を助けてもらえますか? –

-1

をだ、私は問題は、リスト内のすべてのスピナーがMyListAdapterの同じインスタンスを参照するため、あなたのOnItemSelected方法が際立っていない、ということであると信じていますあなたのリスト内のスピナーは、最後にMyListAdapter.spinner参照に設定されたスピナーオブジェクトを参照するだけです。これはリストの最後のものです。

これを解決するには、spinner.getSelectedItem()を使用しないでください。代わりに((Spinner) parent).getSelectedItem()を使用してください。親オブジェクトはから選択された実際のスピナーになります。その時点で、スピナー変数をgetViewメソッドのローカル変数にする必要があります。

フラグメント内でlistView.setOnItemSelectedListener(...)を呼び出す方法では、listView.setOnItemClickListener(...)があることを想定していますが、スピナーからの選択ではなく、リスト内の行のクリックを待ち受けます。

スピナーから選択を検出するには、上記の最初の変更を行います。リスト内の行のクリックを検出するには、listView.setOnItemClickListenerに変更します。あなたの目的や実際に起こったエラーのための文脈がなければ、どちらか、あるいは最初のものが望まれるかどうかは分かりません。

EDIT:あなたのコメントから が、私はあなたがあなたのMyListAdapterでこれを持ってすべきだと思うん:あなたのフラグメントで

public class MyListAdapter extends ArrayAdapter implements AdapterView.OnItemSelectedListener { 

public MyListAdapter(Context context) { 
    super(context, R.layout.single_listview_item); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View row = convertView; 

    Spinner spinner = (Spinner) row.findViewById(R.id.simpleSpinner); 
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
      parent.getContext(), 
      R.array.country_arrays, 
      android.R.layout.simple_spinner_item); 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinner.setAdapter(adapter); 
    spinner.setOnItemSelectedListener(this); 

    return row; 
} 

@Override 
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
    String selState = (String) ((Spinner) parent).getSelectedItem(); 
    System.out.println(selState); 
    Toast.makeText(
      parent.getContext(), 
      "Clicked on Planet: " + selState + "", Toast.LENGTH_SHORT).show(); 
} 

@Override 
public void onNothingSelected(AdapterView<?> parent) { 

} 

} 

そして、この(なしリスナー):

ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_list2, container, false); 
    listView = (ListView) rootView.findViewById(R.id.listview); 
    ListAdapter listAdapter = new MyListAdapter(getContext()); 
    listView.setAdapter(listAdapter); 
+0

申し訳ありませんが、コードを書くことはできますか? –

+0

オブジェクトをクリックすると、クリックしたオブジェクトの名前でトーストをどのように表示できますか? –

+0

あなたのコードをさらに見て、私はいくつかの自信を失ってしまった。あなたは何をしようとしているのかを明確にすることができますか?あなたのコードは、スピンナを含む単一の行のリストビューを作成しているようで、完全に冗長に見えます。選択可能なリスト(単純なスピナーと、OnItemClickListenerを持つListView)を作成する2つの異なるメソッドの例を一緒にハッシュしたかのように見えます。あなたはスピナーのリストを望んでいるのですか? – jawheele

関連する問題