2016-11-29 32 views
0

我想在我的setOnBackButtonClickListener方法中設置OnClickListener作爲參數。已經創建的偵聽器對象並將其設置爲我的方法內的參數,但OnClickListener沒有被觸發。OnClickListener沒有觸發參數

當我做日誌時,方法被調用,但它不會監聽器。

我想這是因爲Fragment LifeCycle。

這裏是我的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方法調用:

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

你得到任何異常? – mismanc

回答

0

可以綁定你的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; 
     } 
    } 
}