2016-10-01 6 views
3

アクティビティに保持されているフラグメントに浮動アクションボタンを追加しました。ユーザーがクリックすると、新しいアクティビティが開始されますが、何も起こりません。ここでフラグメント内のfabがクリックイベントに応答しないのはなぜですか?

は、フラグメントレイアウトである:ここで

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

は、フラグメントのクラスです:

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

はなぜクリックイベントに応答していないFabが、これは、アクティビティによって処理されなければならないのですか?

ありがとうございます。

+0

A sugg estion-あなたはデータバインディングを使用し、findViewByIdを避けることができます。とにかくデバッグして、onClickに何かを記録してみてください – Raghunandan

答えて

0

xmlファイルにclickイベントを追加してみてください。

<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"/> 

その後の活動に追加

public void floatBtnClicked(View v) { 

} 
0

チェックプロジェクトレベルのbuild.gradle:

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

チェックモジュールレベルの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; 
} 
関連する問題