Android - 在 RecyclerView 中单击的项目上打开新活动 [重复]
Posted
技术标签:
【中文标题】Android - 在 RecyclerView 中单击的项目上打开新活动 [重复]【英文标题】:Android - Open new activity on item clicked in RecyclerView [duplicate] 【发布时间】:2018-02-04 22:13:37 【问题描述】:我正在为新手创建一个简单的应用程序,但我被困在主要部分。我创建了 RecyclerView 列表。我想知道如何通过单击 ListView 中的第一项来打开一个新的 Activity(参见屏幕截图)。
这是我的 MainActivity 文件:
public class MainActivity extends AppCompatActivity
Toolbar toolbar;
DrawerLayout drawerLayout;
NavigationView navigationView;
private ArrayList<String> countries;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViews();
private void initViews()
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.card_recycler_view);
recyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext());
recyclerView.setLayoutManager(layoutManager);
countries = new ArrayList<>();
countries.add("Computer");
countries.add("RAM");
countries.add("ROM");
countries.add("MotherBoard");
countries.add("Printer");
countries.add("CPU");
countries.add("Pendrive");
countries.add("Keyboard & Mouse");
RecyclerView.Adapter adapter = new DataAdapter(countries);
recyclerView.setAdapter(adapter);
recyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener()
GestureDetector gestureDetector = new GestureDetector(getApplicationContext(),
new GestureDetector.SimpleOnGestureListener()
@Override
public boolean onSingleTapUp(MotionEvent e)
return true;
);
@Override
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e)
View child = rv.findChildViewUnder(e.getX(), e.getY());
if (child != null && gestureDetector.onTouchEvent(e))
int position = rv.getChildAdapterPosition(child);
Toast.makeText(getApplicationContext(), countries.get(position),
Toast.LENGTH_SHORT).show();
return false;
@Override
public void onTouchEvent(RecyclerView rv, MotionEvent e)
@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept)
);
数据适配器:
public class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder>
private ArrayList<String> countries;
public DataAdapter(ArrayList<String> countries)
this.countries = countries;
@Override
public DataAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i)
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.card_row, viewGroup, false);
return new ViewHolder(view);
@Override
public void onBindViewHolder(DataAdapter.ViewHolder viewHolder, int i)
viewHolder.tv_country.setText(countries.get(i));
@Override
public int getItemCount()
return countries.size();
public class ViewHolder extends RecyclerView.ViewHolder
private TextView tv_country;
public ViewHolder(View view)
super(view);
tv_country = (TextView)view.findViewById(R.id.tv_country);
【问题讨论】:
在此处查看已接受的答案。 -> 将 ClickListener 添加到您的 ViewHolder。 ***.com/questions/24885223/… 【参考方案1】:你应该使用 onItemClickListener 或 OnClickListener
recyclerView.setOnClickListener(new View.OnClickListener()
...
【讨论】:
你能详细告诉我吗? 而不是使用这个recyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener()
你应该使用我在答案中说的方法。另一种可能性是向适配器添加一个 onclick 方法,用于当用户单击每个文本视图时
谢谢老哥问题解决了【参考方案2】:
在 onBindViewHolder 函数中,在项目上添加 onClickListner。
@Override
public void onBindViewHolder(DataAdapter.ViewHolder viewHolder, int i)
viewHolder.tv_country.setText(countries.get(i));
viewHolder.tv_country.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View view)
);
在这个例子中,我在 tv_country 上添加了 onCLickListner。如果您需要进一步的帮助,请在 cmets 中问我。
【讨论】:
永远欢迎!以上是关于Android - 在 RecyclerView 中单击的项目上打开新活动 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
android: ScrollView 内的 RecyclerView
Android:在 Recyclerview 中更改图像旋转