2016-10-01 136 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; 
    } 
} 

为什么工厂不响应点击事件,应该通过这个活动来处理?

在此先感谢。

+0

一个建议estion-您可以使用数据绑定并避免findViewById。无论如何,尝试调试,并在onClick中记录一些东西 – Raghunandan

回答

0

尝试在xml文件中添加单击事件。

<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; 
} 
相关问题