Android setonclicklistener无法使用回收器标头

Android setonclicklistener无法使用回收器标头,android,android-recyclerview,Android,Android Recyclerview,我正在开发一个应用程序使用回收标题。而我的回收商有头。源代码回收器标题如中所示 我想激活回收器标题中的“单击时设置侦听器”。当我点击回收器标题时,它会显示一条祝酒信息。我的代码如下 我在片段中使用 HomeFragment.java public class HomeFragment extends android.support.v4.app.Fragment { List<GetDataAdapter> GetDataAdapter1; RecyclerView recycler

我正在开发一个应用程序使用回收标题。而我的回收商有头。源代码回收器标题如中所示

我想激活回收器标题中的“单击时设置侦听器”。当我点击回收器标题时,它会显示一条祝酒信息。我的代码如下

我在片段中使用

HomeFragment.java

public class HomeFragment extends android.support.v4.app.Fragment {
List<GetDataAdapter> GetDataAdapter1;
RecyclerView recyclerView;
RecyclerView.LayoutManager recyclerViewlayoutManager;
RecyclerView.Adapter recyclerViewadapter;
RecyclerViewHeader recyclerHeader;

String GET_JSON_DATA_HTTP_URL;
String JSON_IMAGE_TITLE_NAME = "image_title";
String JSON_IMAGE_URL = "image_url";
String JSON_IMAGE_ID = "id";
String JSON_MRP = "mrp";
String JSON_RATE = "rate";
String JSON_DISCOUNT = "discount";

JsonArrayRequest jsonArrayRequest ;
RequestQueue requestQueue ;

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

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_home, container, false);


    ((AppCompatActivity)getActivity()).getSupportActionBar().setTitle("Home");



    GET_JSON_DATA_HTTP_URL = Util.URL_SERVER + "categories.php";

    GetDataAdapter1 = new ArrayList<>();
    recyclerView = (RecyclerView) rootView.findViewById(R.id.recyclerview3);
    recyclerView.setHasFixedSize(true);
    recyclerViewlayoutManager = new LinearLayoutManager(getContext());
    recyclerView.setLayoutManager(recyclerViewlayoutManager);

    recyclerHeader = (RecyclerViewHeader) rootView.findViewById(R.id.header);
    recyclerHeader.attachTo(recyclerView);

    recyclerHeader.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.d("LOG", "clicked");
        }
    });

            JSON_DATA_WEB_CALL();

    // Inflate the layout for this fragment
    return rootView;
}

public void JSON_DATA_WEB_CALL(){

    final ProgressDialog progressDialog = new ProgressDialog(getContext(), R.style.AppTheme_Dark_Dialog);
    progressDialog.setIndeterminate(true);
    progressDialog.setMessage("Loading");
    progressDialog.show();

    jsonArrayRequest = new JsonArrayRequest(GET_JSON_DATA_HTTP_URL,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {

                    progressDialog.dismiss();
                    Log.d("LOGTAG", "Response :"+response);
                    JSON_PARSE_DATA_AFTER_WEBCALL(response);
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                }
            });

    requestQueue = Volley.newRequestQueue(getContext());
    requestQueue.add(jsonArrayRequest);
}

public void JSON_PARSE_DATA_AFTER_WEBCALL(JSONArray array){
    for(int i = 0; i<array.length(); i++) {
        GetDataAdapter GetDataAdapter2 = new GetDataAdapter();
        JSONObject json = null;
        try {
            json = array.getJSONObject(i);
            GetDataAdapter2.setImageTitleName(json.getString(JSON_IMAGE_TITLE_NAME));
            GetDataAdapter2.setImageServerUrl(json.getString(JSON_IMAGE_URL));
            GetDataAdapter2.setImageId(json.getString(JSON_IMAGE_ID));
            GetDataAdapter2.setMrp(json.getString(JSON_MRP));

            GetDataAdapter2.setDiscount(json.getString(JSON_DISCOUNT));

            //Log.d("LOGTAG", "JSON_MRP : "+json.getString(JSON_MRP)+"JSON_RATE : "+json.getString(JSON_RATE)+"JSON_DISCOUNT :"+json.getString(JSON_DISCOUNT));
        } catch (JSONException e) {
            e.printStackTrace();
        }
        GetDataAdapter1.add(GetDataAdapter2);
    }

    recyclerViewadapter = new RecyclerViewAdapter(GetDataAdapter1, getContext());
    recyclerView.setAdapter(recyclerViewadapter);

}

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
}

@Override
public void onDetach() {
    super.onDetach();
}
}
公共类HomeFragment扩展了android.support.v4.app.Fragment{
列出GetDataAdapter1;
回收视图回收视图;
RecyclerView.LayoutManager recyclerViewlayoutManager;
适配器RecycleWebAdapter;
回收商回收商;
字符串GET_JSON_DATA_HTTP_URL;
字符串JSON\u IMAGE\u TITLE\u NAME=“IMAGE\u TITLE”;
字符串JSON\u IMAGE\u URL=“IMAGE\u URL”;
字符串JSON_IMAGE_ID=“ID”;
字符串JSON_MRP=“MRP”;
字符串JSON_RATE=“RATE”;
字符串JSON_DISCOUNT=“DISCOUNT”;
JsonArrayRequest JsonArrayRequest;
请求队列请求队列;
公共HomeFragment(){
//必需的空公共构造函数
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图根视图=充气机。充气(R.layout.fragment\u home,container,false);
((AppCompatActivity)getActivity()).getSupportActionBar().setTitle(“主页”);
获取_JSON_DATA_HTTP_URL=Util.URL_SERVER+“categories.php”;
GetDataAdapter1=新的ArrayList();
recyclerView=(recyclerView)rootView.findviewbyd(R.id.recyclerview3);
recyclerView.setHasFixedSize(true);
recyclerViewlayoutManager=新的LinearLayoutManager(getContext());
recyclerView.setLayoutManager(recyclerViewlayoutManager);
recyclerHeader=(RecyclerViewHeader)rootView.findViewById(R.id.header);
回收商负责人。附件(回收商视图);
recyclerHeader.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
Log.d(“Log”,“clicked”);
}
});
JSON_DATA_WEB_CALL();
//为该碎片膨胀布局
返回rootView;
}
public void JSON_DATA_WEB_CALL(){
final ProgressDialog ProgressDialog=新建ProgressDialog(getContext(),R.style.AppTheme\u Dark\u Dialog);
progressDialog.setUndeterminate(true);
progressDialog.setMessage(“加载”);
progressDialog.show();
jsonArrayRequest=新的jsonArrayRequest(获取JSON数据、HTTP URL、,
新的Response.Listener(){
@凌驾
公共void onResponse(JSONArray响应){
progressDialog.disclose();
Log.d(“LOGTAG”,“Response:”+Response);
JSON在WEBCALL之后解析数据(响应);
}
},
新的Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
}
});
requestQueue=Volley.newRequestQueue(getContext());
add(jsonArrayRequest);
}
public void JSON\u解析\u数据\u WEBCALL之后(JSONArray数组){

对于(int i=0;i您正在
RecycleServiceWheader
上设置
OnClickListener
,我认为您希望在
RecycleServiceWheader
中的按钮上设置它

  • android:id
    添加到
    回收器的
    按钮中
  • headerButton
    上设置
    OnClickListener
    ,而不是
    recycleServiceWheader

  • 您正在
    RecycleServiceWheader
    上设置
    OnClickListener
    ,而我相信您想在
    RecycleServiceWheader
    中的按钮上设置它

  • android:id
    添加到
    回收器的
    按钮中
  • headerButton
    上设置
    OnClickListener
    ,而不是
    recycleServiceWheader

  • 我认为,
    onClickListener
    不适用于
    recyclerivewheader
    的原因在于
    recyclerivewheader
    内部有一个
    按钮

    此按钮将显示在上方
    RecyclerViewReader
    have width/height match
    RecyclerViewReader

    因此,您将永远无法单击
    RecycleServiceWheader
    ,只能单击
    按钮


    如果您仍然想在
    RecycleServiceWheader
    上处理
    onClickListener
    ,则需要将
    按钮的大小设置得更小,然后您可以单击
    RecycleWheader

    我认为
    onClickListener
    不适用于
    RecycleWheader
    的原因是因为在
    RecycleServiceWheader
    中e> 您有一个
    按钮

    此按钮将显示在上方
    RecyclerViewReader
    have width/height match
    RecyclerViewReader

    因此,您将永远无法单击
    RecycleServiceWheader
    ,只能单击
    按钮


    如果您仍然希望在
    RecycleServiceWheader
    上处理
    onClickListener
    ,则需要将
    按钮的大小设置为更小,然后您可以单击
    RecycleServiceWheader

    您可以发布布局(xml)吗?我已经添加了xml文件。请检查。我看到你已经在RecycleServiceWheader上实现了onClickListener,但它不能正常工作?是的,怎么可能?@john你在RecycleServiceWheader中有一个按钮,我想你可以为这个按钮简单地实现onClickListener你可以发布布局(xml)吗?我已经添加了xml文件。请检查它。我看到你已经在RecycleServiceWheader上实现了onClickListener,但它不能正常工作?是的,怎么可能?@john你在RecycleServiceWheader中有一个按钮,我想你可以简单地为这个按钮实现onClickListener无法获取HeaderButton。应该为HeaderButton导入哪个文件。我更新了吗
    public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {
    
    static String categoryId;
    Context context;
    List<GetDataAdapter> getDataAdapter;
    ImageLoader imageLoader1;
    private final View.OnClickListener mOnClickListener = new MyOnClickListener();
    public RecyclerViewAdapter(List<GetDataAdapter> getDataAdapter, Context context){
    
        super();
        this.getDataAdapter = getDataAdapter;
        this.context = context;
    }
    
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.subcategory_items, parent, false);
        v.setOnClickListener(mOnClickListener);
        ViewHolder viewHolder = new ViewHolder(v);
    
    
    
        return viewHolder;
    }
    @Override
    public void onBindViewHolder(ViewHolder Viewholder, int position) {
    
        GetDataAdapter getDataAdapter1 =  getDataAdapter.get(position);
        Viewholder.ImageTitleNameView.setText(getDataAdapter1.getImageTitleName());
        Viewholder.Mrp.setText(getDataAdapter1.getMrp());
        Viewholder.Discount.setText(getDataAdapter1.getDiscount());
    
    
        categoryId = getDataAdapter1.getImageTitleName();
        imageLoader1 = ServerImageParseAdapter.getInstance(context).getImageLoader();
        imageLoader1.get(getDataAdapter1.getImageServerUrl(),
                ImageLoader.getImageListener(
                        Viewholder.networkImageView,//Server Image
                        R.mipmap.ic_launcher,//Before loading server image the default showing image.
                        android.R.drawable.ic_dialog_alert //Error image if requested image dose not found on server.
                )
        );
    
        Viewholder.networkImageView.setImageUrl(getDataAdapter1.getImageServerUrl(), imageLoader1);
    
    
    
    }
    
    @Override
    public int getItemCount() {
    
        return getDataAdapter.size();
    }
    
    
    
    class ViewHolder extends RecyclerView.ViewHolder{
    
    
    
        public TextView ImageTitleNameView;
        public TextView imageid;
        public NetworkImageView networkImageView ;
        public CardView cardView ;
    
        public TextView Mrp;
        public TextView Rate;
        public TextView Discount;
    
    
        public ViewHolder(final View itemView) {
    
            super(itemView);
    
            ImageTitleNameView = (TextView) itemView.findViewById(R.id.textView_item) ;
    
            networkImageView = (NetworkImageView) itemView.findViewById(R.id.VollyNetworkImageView1);
    
            cardView = (CardView) itemView.findViewById(R.id.cardview1);
    
            Mrp = (TextView) itemView.findViewById(R.id.textViewMrp) ;
            Rate = (TextView) itemView.findViewById(R.id.textViewRate) ;
            Discount = (TextView) itemView.findViewById(R.id.textViewDiscount) ;
    
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    int pos = getAdapterPosition();
                    Log.d("LOGTAG", "position : "+pos);
                    Log.d("LOGTAG", "position : "+getDataAdapter.get(pos).getImageId());
    
    
    
                    ProductFragment fragobj=new ProductFragment();
                    Bundle bundle=new Bundle();
                    bundle.putString("subcategory_Product_ID", getDataAdapter.get(pos).getImageId());
                    fragobj.setArguments(bundle);
                    switchFragment(R.id.container_body, fragobj); //replace container ID
    
    
    
    
                }
            });
    
    
        }
    }
    
    public void switchFragment(int id, Fragment fragment) {
        if (context == null)
            return;
    
        //MainActivity is your activity where FriendsFragment is called
        if (context instanceof HomeActivity) {
            HomeActivity homeActivity = (HomeActivity) context;
            homeActivity.loadFragment(id, fragment);
        }
    }
    
    private class MyOnClickListener implements View.OnClickListener {
    
        @Override
        public void onClick(View v) {
    
            GetDataAdapter getDataAdapter = new GetDataAdapter();
    
        }
    }
    }
    
    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:paddingLeft="@dimen/title_padding"
             android:paddingRight="@dimen/title_padding">
    
    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal|top"/>
    
    <com.bartoszlipinski.recyclerviewheader2.RecyclerViewHeader
        android:id="@+id/header"
        android:layout_width="match_parent"
        android:layout_height="@dimen/header_height"
        android:layout_gravity="center_horizontal|top"
        android:layout_margin="@dimen/recycler_divider_width"
        android:background="@drawable/rounded_background_header">
    
        <Button
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_centerInParent="true"
            android:background="?selectableItemBackgroundBorderless"
            android:fontFamily="sans-serif-light"
            android:textAllCaps="false"
            android:text="@string/header"
            android:textColor="@color/clouds"
            android:textSize="20sp"/>
    
    </com.bartoszlipinski.recyclerviewheader2.RecyclerViewHeader>
    
    </FrameLayout>
    
    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="@dimen/recycler_divider_width"
    android:background="@drawable/round_background_green">
    
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="80dp"
        android:layout_gravity="center"
        android:gravity="center"
        android:fontFamily="sans-serif-light"
        android:text="@string/item"
        android:textSize="16sp"
        android:textColor="@color/clouds" />
    </FrameLayout>
    
    <Button
        android:id="@+id/button_header"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerInParent="true"
        android:background="?selectableItemBackgroundBorderless"
        android:fontFamily="sans-serif-light"
        android:textAllCaps="false"
        android:text="@string/header"
        android:textColor="@color/clouds"
        android:textSize="20sp"/>
    
    recyclerHeader = (RecyclerViewHeader) rootView.findViewById(R.id.header);
    recyclerHeader.attachTo(recyclerView);
    Button headerButton = (Button) recyclerHeader.findViewById(R.id.button_header);
    
    headerButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.d("LOG", "clicked");
        }
    });