4

私はAndroid開発にかなり慣れていないので、フラグメントクラスからアクティビティまでの複数のボタンクリックを処理しようとしています。フラグメントクラスにリスナーを作成し、アクティビティクラスにそのインターフェイスを実装させることで、ワンクリックを処理する方法を理解することができました。

myFragment.java

    onResetGridListener mCallback;


    // Container activity must implement this interface
    public interface onResetGridListener
    {
        public void ResetGridClicked();
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
        Bundle savedInstanceState) 
    {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.tilemap, container, false);

        Button button = (Button) view.findViewById(R.id.resetGrid_button);

        // A simple OnClickListener for our button. You can see here how a Fragment can encapsulate
        // logic and views to build out re-usable Activity components.
        button.setOnClickListener(new OnClickListener() 
        {
            public void onClick(View v)
            {
                mCallback.ResetGridClicked();
            }

        });

        return view;
    }

これは完全に機能しますが、同じフラグメントに別のボタンがあり、今後さらに多くのボタンがあるので、これをどのように処理するのか疑問に思いました。アクティビティは複数のインターフェース(ボタンごとに1つ)を実装できますか、それともこれを間違った方法で実行していますか?

お手数ですが情報ありがとうございます

4

2 に答える 2

8

Fragmentにインターフェースを実装させることができます。次に、次のようになります。

 //init buttons somewhere
 button.setOnClickListener(this);
 anotherButton.setOnClickListener(this);

 //that's a Fragment method
 public void onClick(View v)
   {
      switch(v.getId()){
          case R.id.button1:
            doStuff();
          break;
          case R.id.button2:
            doStuff();
          break;
      }
   }
于 2012-08-25T17:21:49.360 に答える
1

リスナーを使用するには2つの方法があります。

  1. この場合、カプセル化クラスによってOnClickLitenerを実装すると、このコードがフラグメントクラスに含まれます。

    button1.setOnClickListener(this) ; 
    button2.setOnClickListener(this) ;
    
    // you will have to define the clickHandler:onClick
     public void onClick(View v)
       {
          switch(v.getId()){
              case R.id.button1:
                // your code here 
              break;
              case R.id.button2:
                // your code here 
              break;
          }
       }
    
  2. 各ボタンのリスナーを定義する:

 button1.setOnClickListener( new View.OnClickListener() {
    public void onClick(View v) {
                     // Perform action on click
                 }
             });
 button2.setOnClickListener( new View.OnClickListener() {
                 public void onClick(View v) {
                     // Perform action on click
                 }
             });

このようにして、onClickListenerインターフェースを実装する必要はありませんでした。

于 2012-08-25T17:25:17.483 に答える