2016-11-29 7 views
0

私は、リスナーの私のsetOnBackButtonClickListener method.Already作成されたオブジェクトの内部パラメータとしてOnClickListener設定して、私のメソッド内のパラメータとして設定しようとしていますが、OnClickListener trigeredされていないと起動されません。OnClickListenerパラメータ

私がログインを行うと、メソッドが呼び出されたが、それはリスナーをtrigerしません。

私はこれが原因断片ライフサイクルのあることとします。

@Override 
    public void onViewCreated(View view, Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 
     actionBar.setOnBackButtonClickListener(clickL); 
    } 
+0

は、あなたが任意の例外を得るのですか? – mismanc

答えて

0

あなたはあなたのレイアウトに変数としてごOnClickListenerを結合して、あなたのビューに割り当てることができます。

@Bind(R.id.action_bar) ActionBar actionBar; 

    super.onCreate(savedInstanceState); 
     setRetainInstance(true); 
    } 

    View.OnClickListener clickL = new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      navigateTo(LoginActivity.class); 
     } 
    }; 

ここonViewCreated内部のメソッドの呼び出しは次のとおりです。

は、ここに私のOnClickListenerです。私は通常断片と何

は、View.OnClickListenerを実装して、レイアウトにフラグメントを結合しています。

レイアウト:frag_test.xml

<?xml version="1.0" encoding="utf-8"?> 
<layout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 

    <data> 
     <variable 
      name="fragment" 
      type="au.com.myapp.fragments.BaseFragment"/> 
    </data> 

    <TextView 
     android:id="@+id/tv_undo" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     style="@style/AppTheme.TextView" 
     android:text="UNDO" 
     android:onClickListener="@{fragment}"/> 

</layout> 

フラグメント:

public class BaseFragment extends Fragment implements View.OnClickListener { 

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

     FragTestBinding binding = FragTestBinding.inflate(inflater); 

     // Set the layout's "fragment" variable so that this fragment handles the onClick. 
     binding.setFragment(this); 

     return binding.getRoot(); 
    } 

    @Override 
    public void onClick(View v) { 

     switch (v.getId()) { 

      case R.id.tv_undo: 
       // Your code in response to the click. 
       break; 
     } 
    } 
}