【发布时间】:2019-11-03 20:56:32
【问题描述】:
我在 RecyclerView 中显示一个切换按钮
hadees_contents.xml
<ToggleButton
android:id="@+id/toggle_btn"
android:layout_width="10dp"
android:layout_height="25dp"
android:layout_weight="1"
android:background="@drawable/unfavorite"
android:focusable="false"
android:focusableInTouchMode="false"
android:textOff=""
android:textOn="" />
HadeesAdapter.java:
public class HadeesAdapter extends RecyclerView.Adapter<HadeesAdapter.ViewHolder> {
List<ToggleModel> toggleModelList;
private String[] data;
Context context;
public HadeesAdapter(List<ToggleModel> toggleModelList, String[] data, Context context) {
this.toggleModelList = toggleModelList;
this.data = data;
this.context = context;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View view = inflater.inflate(R.layout.hadees_contents, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, final int position) {
final ToggleModel toggleModel = toggleModelList.get(position);
if(toggleModel.isFavorite())
holder.toggle_btn.setBackgroundResource(toggleModel.getToggled());
else
holder.toggle_btn.setBackgroundResource(toggleModel.getUntoglled());
String title = data[position];
holder.textView.setText(title);
((ViewHolder) holder).copybutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Toast.makeText(view.getContext(), "dfdfd", Toast.LENGTH_SHORT).show();
ClipboardManager cm = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
cm.setText(holder.textView.getText().toString());
Toast.makeText(context, "Copied :)", Toast.LENGTH_SHORT).show();
}
});
holder.whatsapText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Toast.makeText(view.getContext(), "dfdbnbnbnfd", Toast.LENGTH_SHORT).show();
Intent whatsappIntent = new Intent(Intent.ACTION_SEND);
whatsappIntent.setType("text/plain");
whatsappIntent.setPackage("com.whatsapp");
whatsappIntent.putExtra(Intent.EXTRA_TEXT, holder.textView.getText().toString());
Log.e("WCLICKED", holder.textView.getText().toString());
try {
context.startActivity(whatsappIntent);
} catch (android.content.ActivityNotFoundException ex) {
Toast.makeText(context, "WhatApp not Found", Toast.LENGTH_SHORT).show();
}
}
});
holder.share_txt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try {
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_SUBJECT, "Lal Bunglow Maszid");
String shareMessage= holder.textView.getText().toString().trim();
//shareMessage = shareMessage + "https://play.google.com/store/apps/details?id=" + BuildConfig.APPLICATION_ID +"\n\n";
shareIntent.putExtra(Intent.EXTRA_TEXT, shareMessage);
context.startActivity(Intent.createChooser(shareIntent, "choose one"));
} catch(Exception e) {
//e.toString();
Log.e("Error in sharing","error");
}
}
});
holder.toggle_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (toggleModel.isFavorite)
toggleModel.setFavorite(false);
else
toggleModel.setFavorite(true);
notifyItemChanged(position);
}
});
}
@Override
public int getItemCount() {
return data.length;
}
class ViewHolder extends RecyclerView.ViewHolder {
TextView textView ;
ImageView copybutton,share_txt;
ImageView whatsapText;
ToggleButton toggle_btn;
public ViewHolder(@NonNull View itemView) {
super(itemView);
textView = itemView.findViewById(R.id.textView);
copybutton = itemView.findViewById(R.id.copybutton);
textView = itemView.findViewById(R.id.textView);
whatsapText = itemView.findViewById(R.id.whatsApp_txt);
share_txt= itemView.findViewById(R.id.share_txt);
toggle_btn = itemView.findViewById(R.id.toggle_btn);
String abc = textView.getText().toString();
}
}
}
Hadees.java:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View root = inflater.inflate(R.layout.fragment_hadees, container, false);
ImageView copybutton= root.findViewById(R.id.copybutton);
final TextView textView=root.findViewById(R.id.textView);
ImageView whatsapText=root.findViewById(R.id.whatsApp_txt);
myrecyclerview=(RecyclerView)root.findViewById(R.id.myrecyclerview);
myrecyclerview.setLayoutManager(new LinearLayoutManager(getActivity()));
当我在 RecyclerView 中向下滚动时,我发现其中许多切换按钮是自动激活的。
这是我的 Haddes 适配器的 onBindViewHolder :
@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, final int position) {
holder.toggle_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (holder.toggle_btn.isChecked()){
// flag=1;
holder.toggle_btn.setBackgroundResource(R.drawable.favorited);
// intent.putExtra("MRF", mrf.getText().toString().trim());
// Log.e("DATA :",mrf.getText().toString().trim());
// Toast.makeText(MainActivity.this, "Added to Favorites Successfully !"+ flag, Toast.LENGTH_SHORT).show();
}
else {
holder.toggle_btn.setBackgroundResource(R.drawable.unfavorite);
// flag=0;
// Toast.makeText(MainActivity.this, "Removed from favorites"+flag, Toast.LENGTH_SHORT).show();
}
}
});
}
谁能建议为什么会发生这种情况以及如何解决它? 模型类:
package com.zedapps.elon;
public class ToggleModel {
int toggled = R.drawable.favorited;
int untoglled = R.drawable.unfavorite;
public ToggleModel(int toggled, int untoglled) {
this.toggled = toggled;
this.untoglled = untoglled;
}
public int getToggled() {
return toggled;
}
public int getUntoglled() {
return untoglled;
}
}
这是我的 Hadees.java 文件:
/**
* A simple {@link Fragment} subclass.
*/
public class Hadees extends Fragment {
RecyclerView myrecyclerview;
ToggleButton toggle_btn;
List<ToggleModel> toggleModelList;
public Hadees() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View root = inflater.inflate(R.layout.fragment_hadees, container, false);
ImageView copybutton= root.findViewById(R.id.copybutton);
final TextView textView=root.findViewById(R.id.textView);
ImageView whatsapText=root.findViewById(R.id.whatsApp_txt);
toggleModelList = new ArrayList<>();
myrecyclerview=(RecyclerView)root.findViewById(R.id.myrecyclerview);
myrecyclerview.setLayoutManager(new LinearLayoutManager(getActivity()));
String[] details={
"Sharab se bacho isiliye kyunki wo har burayi ki chabi hai.❞\n Allah ke Rasool (ﷺ)" +
"(Hadith: Mustadrak: 7313)",
"‟Tum ek doosre ko taana na diya karo aur naa ek doosre ko bure naamo se pukaaro.’\n" +
" Surah Al-Hujurat 49:11",
"❝ Ramzan ka wo Mahina jis me Quraan ka Nuzool hua saari Insaniyat ki Hidayat aur Rahnumai ke liye.❞\n" +
" Surah Baqrah 2:185",
};
myrecyclerview.setAdapter(new HadeesAdapter(toggleModelList,details,getActivity()));
return root;
}
}
【问题讨论】:
-
添加您的
HadeesAdapter的onBindViewHolder代码 -
希望对您有所帮助:stackoverflow.com/a/58578266/2637449
-
@Md.Asaduzzaman 已添加,请查看
-
查看以上链接,希望对您有所帮助。如果没有,请告诉我
-
您必须将 checked/unchecked 状态存储在模型的属性中以保持滚动并首先设置默认状态
标签: android