web-dev-qa-db-ja.com

同じフラグメントに複数のイベントリスナーを実装する-Android

スピナーとボタンで構成されるフラグメントがあります。スピナーで4つのオプションのいずれかを選択すると、ボタンが次のアクティビティに移動します。

スピナーを実装するには、フラグメントにonItemSelectedListenerを実装する必要がありますが、ボタンを使用するには、onClickListenerを実装する必要があります。しかし、私は両方を行うことはできませんか???これは非常に単純なものであり、ビューに複数の異なるイベントリスナーを配置する必要があることは一般的であるはずなので、どのように実装しますか?

これが私が使っているコードです:-

パブリッククラスFragmentTypeSelect extends Fragment implements 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は(私が理解しているように)複数のインターフェース実装をサポートしていないため、私の質問です。

お役に立てれば幸いです。私は少し分厚くなっていると思いますが、Androidだけでなく、OO.

13
RobT

できるよ:

public class FragmentTypeSelect extends Fragment 
        implements OnItemSelectedListener, OnClickListener {
35
Leo Landau
   public class Home extends AppCompatActivity  implements ImageAdapter.OnItemClickListener ,Filterable {

次に、赤い電球をクリックしてメソッドを実装します。複数のインターフェースの実装は、インターフェースをコンマで区切ることによって実行できます。

0
Malak