2016-10-01 2 views
3

J'ai ajouté un bouton d'action flottante à un fragment contenu dans une activité. Lorsque l'utilisateur clique dessus, une nouvelle activité devrait être lancée, mais rien ne se passe.Pourquoi Fab dans fragment ne répond pas aux événements de clic?

Voici la mise en page de fragment:

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      xmlns:tools="http://schemas.android.com/tools" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      xmlns:app="http://schemas.android.com/apk/res-auto" 
      android:paddingBottom="@dimen/activity_vertical_margin" 
      android:paddingLeft="@dimen/activity_horizontal_margin" 
      android:paddingRight="@dimen/activity_horizontal_margin" 
      android:paddingTop="@dimen/activity_vertical_margin" 
      tools:context="com.neutronstar.revu.fragment.FeedFragment"> 

    <android.support.v7.widget.RecyclerView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/review_recycler_view"/> 

    <android.support.design.widget.FloatingActionButton 
     android:id="@+id/add_review_fab" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="bottom|end" 
     android:layout_margin="@dimen/fab_margin" 
     app:srcCompat="@drawable/ic_add_white_24dp" 
     android:clickable="true"/> 

</android.support.design.widget.CoordinatorLayout> 

Voici la classe fragment:

public class ReviewFragment extends Fragment { 

    @BindView(R.id.add_review_fab) FloatingActionButton mAddReviewButton; 

    private OnReviewNext mListener; 

    public ReviewFragment() { 
     // Required empty public constructor 
    } 

    public interface OnReviewNext { 
     void finishReview(String description); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View view = inflater.inflate(R.layout.fragment_review, container, false); 
     ButterKnife.bind(this, view); 

     mAddReviewButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(getActivity(), AddReviewActivity.class); 
       startActivity(intent); 
      } 
     }); 
     return view; 
    } 

    @Override 
    public void onAttach(Context context) { 
     super.onAttach(context); 
     if (context instanceof OnReviewNext) { 
      mListener = (OnReviewNext) context; 
     } else { 
      throw new RuntimeException(context.toString() 
        + " must implement OnReviewNext"); 
     } 
    } 

    @Override 
    public void onDetach() { 
     super.onDetach(); 
     mListener = null; 
    } 
} 

Pourquoi le fabuleux ne répond pas aux événements de clic, doit-il être pris en charge par l'activité?

Merci d'avance. Essayez d'ajouter un événement click dans un fichier xml.

+0

Une suggestion estion- Vous pouvez utiliser la liaison de données et éviter findViewById. De toute façon essayer le débogage et aussi se connecter quelque chose dans onClick – Raghunandan

Répondre

0

<android.support.design.widget.FloatingActionButton 
     android:id="@+id/add_review_fab" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="bottom|end" 
     android:onClick="floatBtnClicked" 
     android:layout_margin="@dimen/fab_margin" 
     app:srcCompat="@drawable/ic_add_white_24dp" 
     android:clickable="true"/> 

ajoutez-le à l'activité

public void floatBtnClicked(View v) { 

} 
0

Vérifiez au niveau du projet build.gradle:

buildscript { 
    repositories { 
    mavenCentral() 
    } 
    dependencies { 
    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' 
    } 
} 

Vérifiez niveau du module build.gradle:

apply plugin: 'android-apt' 

android { 
    ... 
} 

dependencies { 
    compile 'com.jakewharton:butterknife:8.0.1' 
    apt 'com.jakewharton:butterknife-compiler:8.0.1' 
} 


@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View calcView = inflater.inflate(R.layout.content_main, container, false); 

     unbinder = ButterKnife.bind(this, calcView); 

     return calcView; 
    } 

    @Override 
    public void onDestroyView() { 
     super.onDestroyView(); 
     unbinder.unbind(); 
    } 


    @OnClick(R.id.mAddReviewButton) 
    public void one() { 

     Toast.makeText(getActivity(), "Working", Toast.LENGTH_SHORT).show(); 
     result.setText(result.getText().toString() + 1); 
    } 
0
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View view = inflater.inflate(R.layout.fragment_review, container, false); 
    ButterKnife.bind(this, view); 

    mAddReviewButton = (FloatingActionButton) view.findViewByID(R.id.addReviewFab); 

    mAddReviewButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(getActivity(), AddReviewActivity.class); 
      startActivity(intent); 
     } 
    }); 
    return view; 
}