Android setonclicklistener无法使用回收器标头
我正在开发一个应用程序使用回收标题。而我的回收商有头。源代码回收器标题如中所示 我想激活回收器标题中的“单击时设置侦听器”。当我点击回收器标题时,它会显示一条祝酒信息。我的代码如下 我在片段中使用 HomeFragment.javaAndroid setonclicklistener无法使用回收器标头,android,android-recyclerview,Android,Android Recyclerview,我正在开发一个应用程序使用回收标题。而我的回收商有头。源代码回收器标题如中所示 我想激活回收器标题中的“单击时设置侦听器”。当我点击回收器标题时,它会显示一条祝酒信息。我的代码如下 我在片段中使用 HomeFragment.java public class HomeFragment extends android.support.v4.app.Fragment { List<GetDataAdapter> GetDataAdapter1; RecyclerView recycler
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 matchRecyclerViewReader
因此,您将永远无法单击RecycleServiceWheader
,只能单击按钮
如果您仍然想在RecycleServiceWheader
上处理onClickListener
,则需要将按钮的大小设置得更小,然后您可以单击RecycleWheader
我认为onClickListener
不适用于RecycleWheader
的原因是因为在RecycleServiceWheader
中e> 您有一个按钮
此按钮将显示在上方RecyclerViewReader
have width/height matchRecyclerViewReader
因此,您将永远无法单击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");
}
});