2013-08-04 40 views
12

私はスピナーとボタンからなる断片を持っています。スピナーで4つのオプションのいずれかを選択すると、ボタンが次のアクティビティに移動します。同じフラグメント内に複数のイベントリスナーを実装する - Android

スピナーを実装するには、フラグメントのonItemSelectedListenerを実装する必要がありますが、ボタンを使用するにはonClickListenerを実装する必要があります。 しかし、私は両方を行うことはできませんか? これは本当に簡単なことだと思っていましたが、ビュー上に複数の異なるイベントリスナーを配置する必要があります。これはどのように実装しますか?

パブリッククラスFragmentTypeSelect断片 実装OnItemSelectedListener {

@Override 
public View onCreateView(LayoutInflater inflater, 
     ViewGroup container, Bundle savedInstanceState){ 

    // set the view so that it can be referenced 
    View theView = inflater.inflate(R.layout.fragment_type_select, 
      container,false); 

    // set OnClickListener for the button 
    setUpClickListener(theView,R.id.but_select); 


    //=============================== 
    // NEW TYPE SPINNER 
    //=============================== 

    Spinner spinner = (Spinner) theView.findViewById(R.id.new_type_spinner); 
    spinner.setOnItemSelectedListener((OnItemSelectedListener) this); 

    // Create an ArrayAdapter using the string array and a default spinner layout 
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getActivity(), 
      R.array.types_array, android.R.layout.simple_spinner_item); 

    // Specify the layout to use when the list of choices appears 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

    // Apply the adapter to the spinner 
    spinner.setAdapter(adapter); 

    return theView; 

} 

public void onItemSelected(AdapterView<?> parent, View view, 
     int pos, long id) 
{ 

    TextView headingText = (TextView)getView().findViewById(R.id.new_diet_type_text_heading); 
    TextView detailText = (TextView)getView().findViewById(R.id.new_diet_type_text_detail); 

    if (pos == 0) 
    { 
     headingText.setText(R.string.heading_type_1); 
     detailText.setText(R.string.detail_type_1); 
    } 
    if (pos == 1) 
    { 
     headingText.setText(R.string.heading_type_2); 
     detailText.setText(R.string.detail_type_2); 
    } 
    if (pos == 2) 
    { 
     headingText.setText(R.string.heading_type_3); 
     detailText.setText(R.string.detail_type_3); 
    } 
    if (pos == 3) 
    { 
     headingText.setText(R.string.heading_type_4); 
     detailText.setText(R.string.detail_type_4); 
    } 

} 

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

} 



public void onClick(View view){ 

    Toast.makeText(getActivity(), "Clicked", Toast.LENGTH_LONG).show(); 
} 

private void setUpClickListener(View theView, int childViewID) { 
    View childView = theView.findViewById(childViewID); 
    childView.setOnClickListener((OnClickListener) this); 
} 

}

は、もともと私はちょうどにスピナーを持っていたし、これを得た拡張 - :ここでは

は、私が使用していたコードですうまく動作します。その後、onCreateViewにOnClickListenerを設定してボタンの機能を追加し、追加のonClickメソッドとsetUpClickListenerメソッドを追加しようとしました。 これは私が別の場所で行ったのとまったく同じですが、他のケースでは処理するイベントがなく、クラスにonClickListenerを実装させました。 Javaは複数のインタフェース実装(私が理解しているように)をサポートしていません。

希望すると助かります。私はおそらく少し厚いですが、私はまだOO全体だけでなく、Androidにはかなり新しいです。

あなたが行うことができます
+0

あなたは両方を行うことができます。コードを投稿し、問題をより詳しく説明してください。 –

+0

レオ、私は今、上記のコードを掲載しました....ありがとう – RobT

答えて

28

public class FragmentTypeSelect extends Fragment 
     implements OnItemSelectedListener, OnClickListener { 
+0

それはうまくいきました。私はこれをOnClickListenerではなく小文字のonClickListenerで試してみました。そして、どこでもソリューションを検索したところ、コンマで区切られた複数のインターフェースを実装できないと言われました。説明をありがとう。 – RobT

+0

私はまた、Javaでいくつかのインターフェイスを実装することはできませんが、とにかくそれは良い練習ですか、たくさん見ましたか?あなたはこのように推薦しますか? – Xsmael

+1

@Xsmael Javaでは、複数のインタフェースを実装することができます。そして、はい、私はこれが完全に受け入れられる練習であると言います。ここでは、匿名の内部クラスをリスナーに使用することもできますが、それは単なるコードスタイルの問題です。いずれのスタイルも実際には問題ありません。 –

関連する問題