有没有人使用RecyclerView找到一种方法来设置一个onClickListener项目RecyclerView?我想为每个项目的每个布局设置一个监听器,但这似乎有点太麻烦我确信有一种方法RecyclerView可以听取这个onClick事件,但我无法弄明白.
这种方法的优点是什么(在我的类MyAdapter中使用静态嵌套类扩展了RecyclerView.Adapter):
static class MyVH extends RecyclerView.ViewHolder {...}
Run Code Online (Sandbox Code Playgroud)
而这种方法(使用成员内部类):
class MyVH extends RecyclerView.ViewHolder {...}
Run Code Online (Sandbox Code Playgroud)
或者它不会影响性能,可以使用这两种方法吗?
我想在列表中实现部分.我有一份任务清单.List有一个自定义适配器,它扩展了recyclerview刷卡适配器,因为我已经实现了向recyclerview的滑动手势.
因此,现在任务列表与已完成和待处理任务一起显示.每个列表项都有一个复选框,显示任务已完成或待处理.
如果选中复选框,则任务完成,反之亦然.现在我想用标题创建两个部分.一个用于已完成的任务,另一个用于待处理任
所以完成的任务应该显示在已完成的部分内,反之亦然.此外,如果任务未经检查,即待处理,如果用户选中复选框,则该项目应从待处理部分中删除,并应添加到已完成的部分,反之亦然.
我检查了一个库的部分.
https://github.com/afollestad/sectioned-recyclerview
但是当我尝试实现库时,我得到了错误,即适配器无法扩展两个类,因为之前我已经扩展了recyclerview swipe库.
适配器:
public class IAdapter extends RecyclerSwipeAdapter<IAdapter.ItemViewHolder> {
public ArrayList<Task> items;
Context conext;
public int _mId;
List<Task> itemsPendingRemoval = new ArrayList<>();
public IAdapter(Context context, ArrayList<Task> item) {
this.conext=context;
this.items=item;
}
@Override
public int getItemCount() {
return items.size();
}
public static class ItemViewHolder extends RecyclerView.ViewHolder {
Task task;
CheckBox cb;
SwipeLayout swipeLayout;
TaskTableHelper taskTableHelper;
ItemViewHolder(final View itemView) {
super(itemView);
taskTableHelper= new TaskTableHelper(itemView.getContext());
swipeLayout = (SwipeLayout) itemView.findViewById(R.id.swipe);
cb = (CheckBox) itemView.findViewById(R.id.checkbox);
}
}
@Override
public …Run Code Online (Sandbox Code Playgroud) 我有一个包含2个元素的回收器视图。我想添加2个按钮以执行不同的操作(取决于回收器视图的哪个元素。如何做到这一点?我的元素是textviews
SettingsActiv.kt
class SettingsActiv : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_settings)
val arrow_backBtn = findViewById(R.id.settingsToolbarBtn) as Button
arrow_backBtn.setOnClickListener{
startActivity(Intent(this, MainActivity::class.java))
}
val linearLayout = findViewById(R.id.constr) as LinearLayout
val recyclerView = RecyclerView(this)
val series = ArrayList<SeriesModel>()
recyclerView.layoutParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)
series.add(SeriesModel("Unit of length","Meter"))
series.add(SeriesModel("Unit of temperature","Celcius"))
val adapter = MyAdapter(series)
recyclerView.setHasFixedSize(true)
recyclerView.layoutManager = LinearLayoutManager(this, LinearLayout.VERTICAL, false)
recyclerView.adapter = adapter
linearLayout.addView(recyclerView,1)
}
Run Code Online (Sandbox Code Playgroud)
MyAdapter.kt
class MyAdapter(private val seriesList: ArrayList<SeriesModel>) : RecyclerView.Adapter<MyAdapter.MyViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyAdapter.MyViewHolder { …Run Code Online (Sandbox Code Playgroud) 我是 kotlin android 的新手。我已经为 recyclerview 创建了适配器。但我无法为每个 recyclerview 项目执行点击事件。我需要参考代码的解释。请帮助我做到这一点。提前致谢。这是我的代码供您参考。
class CustomAdapter(val readerList: ReaderResponse, mainActivity:
MainActivity,val btnlistener: BtnClickListener) :
RecyclerView.Adapter<CustomAdapter.ViewHolder>() {
companion object {
var mClickListener: BtnClickListener? = null
}
override fun onCreateViewHolder(viewgroup: ViewGroup, index: Int): ViewHolder
{
val view=LayoutInflater.from(viewgroup?.context).inflate(R.layout.reader_list,viewgroup,false)
return ViewHolder(view)
}
override fun getItemCount(): Int {
return readerList.results.size
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
mClickListener = btnlistener
val item = readerList
val reader:ReaderData = readerList.results[position]
/*p0?.imageview?.text=reader.readerIcon*/
holder?.reader_status?.text=reader.readerStatus
holder?.ward_name?.text=reader.wardName
holder?.reader_id?.text=reader.readerID
holder?.reader_name?.text=reader.readerName
holder?.reader_location?.text=reader.readerLocation
if (reader.readerStatus.toLowerCase().equals("yes")){
holder.reader_name.setTextColor(Color.parseColor("#24a314"))
}else if (reader.readerStatus.toLowerCase().equals("no")){
holder.reader_name.setTextColor(Color.parseColor("#f4312d")) …Run Code Online (Sandbox Code Playgroud)