2017-02-08 4 views
0

FragmentsのButterKnifeに問題があります。ButterKnife bind Fragments issue

たとえば、2つのフラグメントがあります。最初のフラグメントには、中央にボタンがあります。私はそれをバインドします

unbinder = ButterKnife.bind(this, rootView); 

は、その後、私は@BindView@OnClickを実装:

@BindView(R.id.btnSignUp) 
Button btnSignUp; 

@OnClick(R.id.btnSignUp) 
public void signUpClick() { 

SignUpClick現在の断片が、新しいものと交換するには:

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
transaction.setAllowOptimization(true); 
transaction.replace(R.id.frame_layout, fragment); 
transaction.addToBackStack(String.valueOf(fragment.getClass())); 
transaction.commit(); 

第2のフラグメントはまた、上のボタンを含まBindViewの実装により、画面の上部に表示されます。

問題がある - 私は空の領域で画面の真ん中にタップすると、signUpClickは断片がbackstackに配置されているので、どこ私のミスか、それは

+0

'transaction.popBackStack();'で前のフラグメントをポップする方法は?新しいフラグメントを追加する前にそれを呼び出します。 –

答えて

0

そのButterKnife間違いであることを確認され、解雇ではありません。したがって、2番目のフラグメントがクリックアクションをとらない場合は、最初のフラグメントに渡されます。

おそらく、第2のフラグメントボタンにクリックリスナーを追加する必要があります。

0

空のボディで2番目のフラグメントのルートにクリックリスナーを追加するだけです。 R.id.root_fragment2が2番目のフラグメントのルートレイアウトのidであると仮定します。

@OnClick(R.id.root_fragment2) 
public void onRootClicked() { 
} 

ここで、2番目のフラグメントはクリックを消費し、それを下のフラグメントに渡しません。

0

2番目のフラグメントは画面上部にありますが、タッチイベントが発生した場合、2番目のフラグメントがイベントを消費しない場合、最初のフラグメントは引き続きタッチイベントを受け入れることができます。 フラグメントにルートビューがある場合は、次のようにビューを設定できます。rootView.setClickable(true);