2016-11-29 3 views
0

Ich versuche, OnClickListener als Parameter in meiner SetOnBackButtonClickListener-Methode zu setzen. Bereits erstellte Objekt des Listeners und legen Sie es als Parameter innerhalb meiner Methode, aber OnClickListener ist nicht trigered.OnClickListener nicht ausgelöst als Parameter

Wenn ich logge, wird Methode aufgerufen, aber es trigger nicht Listener.

Ich nehme an, dass dies wegen Fragment LifeCycle ist.

Hier ist mein 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); 
     } 
    }; 

Hier Methodenaufruf innerhalb onViewCreated:

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

Sie alle Ausnahmen erhalten Sie? – mismanc

Antwort

0

Sie können Ihre OnClickListener als Variable in Ihrem Layout binden und es zu Ihrer Ansicht zuweisen.

Was ich normalerweise mit einem Fragment mache, ist es implementieren View.OnClickListener, und binden Sie dann das Fragment an das Layout.

Layout: 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> 

Fragment:

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; 
     } 
    } 
} 
Verwandte Themen