【发布时间】:2014-12-09 23:17:08
【问题描述】:
我在 RecyclerView 中突出显示项目时遇到问题,类似于在 ListView 中设置选定项目。
目前,我已经设置了 RecyclerView,有一个默认的 LayoutManager,并有一个显示所有数据的适配器。我最近刚刚让onClickListener() 工作(虽然我不确定它是否应该进入onCreateViewHolder() 或onBindViewHolder*( - 不确定何时调用onBindViewHolder())。
我试过四处搜索,最接近的是question here。但是,我完全迷失在这个问题上。 onClick() 方法在哪里(在适配器内部,在包含的活动/片段内部等?)。那是什么viewHolderListener? getPosition() 是什么,它到底是做什么的?从本质上讲,我没有从那个问题中得到任何结果,这是迄今为止我能找到的最好的资源。
这是我当前设置 RecyclerView 的代码:
// Sets up the main navigation
private void setupMainNav() {
// use this setting to improve performance if you know that changes
// in content do not change the layout size of the RecyclerView
mMainRecyclerNav.setHasFixedSize(true);
// use a linear layout manager
LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
mMainRecyclerNav.setLayoutManager(layoutManager);
// Create and set the adapter for this recyclerView
MainNavAdapter adapter = new MainNavAdapter(getActivity());
mMainRecyclerNav.setAdapter(adapter);
}
这是我当前的适配器代码:
class MainNavAdapter extends RecyclerView.Adapter<MainNavAdapter.ViewHolder> {
Context mContext;
// Holds the titles of every row
String[] rowTitles;
// Default constructor
MainNavAdapter(Context context) {
this.mContext = context;
// Get the rowTitles - the necessary data for now - from resources
rowTitles = context.getResources().getStringArray(R.array.nav_items);
}
// Simple class that holds all the views that need to be reused
class ViewHolder extends RecyclerView.ViewHolder{
View parentView; // The view which holds all the other views
TextView rowTitle; // The title of this item
// Default constructor, itemView holds all the views that need to be saved
public ViewHolder(View itemView) {
super(itemView);
// Save the entire itemView, for setting listeners and usch later
this.parentView = itemView;
// Save the TextView- all that's supported at the moment
this.rowTitle = (TextView) itemView.findViewById(R.id.row_title);
}
}
// Create new views (invoked by the layout manager)
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
// Create the view for this row
View row = LayoutInflater.from(mContext)
.inflate(R.layout.list_navmain_row, viewGroup, false);
// Create a new viewHolder which caches all the views that needs to be saved
ViewHolder viewHolder = new ViewHolder(row);
return viewHolder;
}
// Replace the contents of a view (invoked by the layout manager)
@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
// - get element from your dataset at this position
// - replace the contents of the view with that element
viewHolder.rowTitle.setText(rowTitles[i]);
// TODO: Make a better workaround for passing in the position to the listener
final int position = i;
// Set a listener for this entire view
viewHolder.parentView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getActivity(), "Clicked on row: " + position, Toast.LENGTH_SHORT).show();
}
});
}
// Return the size of your dataset (invoked by the layout manager)
@Override
public int getItemCount() {
return rowTitles.length;
}
}
如果有任何帮助,我将不胜感激。谢谢。
【问题讨论】:
-
这可能有助于在回收视图中突出显示列表项amolsawant88.blogspot.in/2015/08/…
标签: android android-recyclerview