0

私は4つのフラグメントを膨らませた基本的なアクティビティを持っています。 私はすべての断片で使用しなければならないいくつかの方法を持っています。しかし、私はそれを望んでいません。私はすべてのフラグメントに自分のメソッドを再利用できるように、私の基本アクティビティ内にそのメソッドを実装したいと思います。 フラグメントのすべての親レイアウトのonTouchListenerイベントを使用したいと思います。 私はこれをxml onClickメソッドで実現することができ、このメソッドをbaseActivityで呼び出すことができますが、onTouchイベントを使用したいので、そのメソッドはレイアウトxmlで使用できません。だから私は基本的なアクティビティで私のフラグメントレイアウトからリソースにアクセスし、BaseActivityでTouchEventを実装したいだけです。ベースアクティビティ内のリソースまたはフラグメントのビューにアクセスできます

可能でしょうか? 助けていただければ幸いです。ありがとうございます!

答えて

0
あなたはあなたのフラグメントのonCreateViewメソッドが実行されたことを確認する必要がありgetViewメソッドを呼び出す前にgetViewメソッド()

アプローチ1

を使用することができ

(たとえば、あなたがviewpagerにOnPageChangeListenerを添付し、そして可能性がありonPageSelectedの内側に、あなたが添付OnTouchListener)

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
     @Override 
     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

     } 

     @Override 
     public void onPageSelected(int position) { 
      fragments.get(position).getView().setOnTouchListener(new View.OnTouchListener() { 
       @Override 
       public boolean onTouch(View view, MotionEvent motionEvent) { 
        return false; 
       } 
      }); 
     } 

     @Override 
     public void onPageScrollStateChanged(int state) { 

     } 
    }); 

アプローチ2

setOnTouchListener方法でベースの断片を作成します。

public class TouchableFragment extends Fragment { 

    protected View.OnTouchListener mOnTouchListener; 

    public void setOnTouchListener(View.OnTouchListener mOnTouchListener) { 
     this.mOnTouchListener = mOnTouchListener; 
    } 
} 

をごフラグメントのonCreateViewメソッド内:

public class MyFragment extends TouchableFragment { 
    public View onCreateView(LayoutInflater inflater, 
         ViewGroup container, Bundle s) { 

     mView = inflater.inflate(
       R.layout.a_layout 
       container, 
       false 
     ); 

     if(this.mOnTouchListener != null){ 
      mView.setOnTouchListener(this.mOnTouchListener); 
     } 

     return mView; 
    } 
} 

そして、あなたの活動の内部:

MyFragment myFragment = new MyFragment(); 
myFragment.setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View view, MotionEvent motionEvent) { 
     return false; 
    } 
}); 
+0

返信用thnx ...それは私のためには機能しませんでした。 –

+0

ねえ、もう一度私の答えを確認できますか? getView()が呼び出されたことを確認した後でgetView()を呼び出す必要があることを忘れてしまいました。この問題を解決する新しいアプローチを追加しました。ありがとうございました –

+0

Cardosoにもう一度感謝します。このコードをチェックします –

0

あなたはあなたのビューを定義することができますあなたの断片の静的メンバーとして。その後、あなたの活動の中でそれらにアクセスすることができます。 これを実行した場合は、静的ビューを使用しているときにフラグメントにアクセスできることを確認する必要があります。

1

public classという名前のクラスをpublic staticとして宣言し、そのクラスを使用してこのメ​​ソッドを任意のアクティビティやフラグメントにアクセスできる場合、そのメソッドにアクティビティの引数コンテキストを渡す必要があります。

これはあなたにとって役に立ちます。

+0

私はそのクラス内のフラグメントビューにアクセスできますか?もしそうなら、どうやって? –

+0

はいビューを引数に渡します。 –

関連する問題