【发布时间】:2020-07-22 21:35:48
【问题描述】:
在我的应用程序中,我使用回收器视图来显示一些数据,并且对于回收器视图中的每个项目,我正在添加已检查文本视图的列表。这些检查过的文本视图是根据提供的列表大小添加的,并且工作正常。现在我想为这些项目添加点击监听器以了解它们是否被选中?
检查项目时,应将这些已检查的项目带到另一个活动中。但是现在点击监听器直接添加到回收器视图中,它不会访问我来执行开箱即用的代码。所以我正在寻找如何添加点击监听器并在另一个活动中访问它。
我的 Recyclerview 代码:
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckedTextView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.allio.customer.R;
import com.allio.customer.models.Types_Item;
import com.bumptech.glide.Glide;
import com.firebase.ui.firestore.FirestoreRecyclerAdapter;
import com.firebase.ui.firestore.FirestoreRecyclerOptions;
import com.github.florent37.expansionpanel.ExpansionLayout;
import com.github.florent37.expansionpanel.viewgroup.ExpansionLayoutCollection;
public class Types_adapter extends FirestoreRecyclerAdapter<Types_Item, Types_adapter.RecyclerHolder> {
private final ExpansionLayoutCollection expansionsCollection = new ExpansionLayoutCollection();
Context context;
public Types_adapter(@NonNull FirestoreRecyclerOptions<Types_Item> options, Context context) {
super(options);
expansionsCollection.openOnlyOne(true);
this.context = context;
}
@Override
protected void onBindViewHolder(@NonNull RecyclerHolder holder, int position, @NonNull Types_Item model) {
expansionsCollection.add(holder.getExpansionLayout());
holder.textView.setText(model.getName());
Glide.with(holder.imageView.getContext())
.load(model.getImageURL())
.into(holder.imageView);
CheckedTextView[] textView = new CheckedTextView[model.getProblems().size()];
holder.problems.removeAllViews();
for (int i = 0; i < model.getProblems().size(); i++){
textView[i] = new CheckedTextView(context);
textView[i].setText(model.getProblems().get(i));
textView[i].setPadding(10,10,10,10);
textView[i].setTextSize(15);
int finalI = i;
textView[i].setOnClickListener(v -> {
if (textView[finalI].isChecked()){
textView[finalI].setChecked(false);
textView[finalI].setCheckMarkDrawable(0);
}else {
textView[finalI].setChecked(true);
textView[finalI].setCheckMarkDrawable(R.drawable.checked);
}
});
holder.problems.addView(textView[i]);
}
}
@NonNull
@Override
public RecyclerHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return RecyclerHolder.buildFor(parent);
}
public final static class RecyclerHolder extends RecyclerView.ViewHolder {
private static final int LAYOUT = R.layout.item_types;
ExpansionLayout expansionLayout;
TextView textView;
ImageView imageView;
LinearLayout problems;
public static RecyclerHolder buildFor(ViewGroup viewGroup){
return new RecyclerHolder(LayoutInflater.from(viewGroup.getContext()).inflate(LAYOUT, viewGroup, false));
}
public RecyclerHolder(View itemView) {
super(itemView);
expansionLayout = itemView.findViewById(R.id.expansionLayout);
textView = itemView.findViewById(R.id.type_name);
imageView = itemView.findViewById(R.id.type_image);
problems = itemView.findViewById(R.id.problems_list);
}
public ExpansionLayout getExpansionLayout() {
return expansionLayout;
}
}
}
【问题讨论】:
-
CheckedTextView[] textView;将其设为类变量。如果您需要数据,请使用 for 循环和 textView[i].isChecked() 来获取状态。 -
i want to get the list of selected items?您想要检查项目的列表吗? -
@blackapps 抱歉回复晚了。 In my case when an item from the list is selected then a child layout is shown and a number is displayed according to the no.从列表中选择的项目如果没有选择项目,则子布局将隐藏。当检查时,这些选定项目的列表将被带到另一个活动。我正在寻找一种正确的方法来了解检查的 textview 的状态并相应地编写代码。
-
@blackapps 希望我能得到一个解决方案,因为我在过去一周一直在努力解决这个问题。这个唯一的解决方案可以帮助我完成我的应用程序。
-
我在第一条评论中就告诉了大家。你还需要什么?
标签: android firebase android-recyclerview checkedtextview