Android 如何设置onclick listener recyclerview并在每次单击时启动新活动
我正在使用Android 如何设置onclick listener recyclerview并在每次单击时启动新活动,android,Android,我正在使用recyclerview,无法开始新的活动 在每次点击时。如何启动新的活动recyclerview 以下是我的代码: 主要活动: public class MainActivity extends AppCompatActivity { private List<Data> dataList = new ArrayList<>(); private RecyclerView recycler_view; private Custom_
recyclerview
,无法开始新的活动
在每次点击时。如何启动新的活动recyclerview
以下是我的代码:
主要活动:
public class MainActivity extends AppCompatActivity {
private List<Data> dataList = new ArrayList<>();
private RecyclerView recycler_view;
private Custom_Adapter custom_adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recycler_view = (RecyclerView) findViewById(R.id.recycler_view);
custom_adapter = new Custom_Adapter(dataList);
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
recycler_view.setLayoutManager(mLayoutManager);
recycler_view.setItemAnimator(new DefaultItemAnimator());
recycler_view.setAdapter(custom_adapter);
prepareMovieData();
}
private void prepareMovieData() {
Data data = new Data("Preamble");
dataList.add(data);
data = new Data("Parts");
dataList.add(data);
data = new Data("Schedules");
dataList.add(data);
data = new Data("Amendments");
dataList.add(data);
data = new Data("Quiz");
dataList.add(data);
custom_adapter.notifyDataSetChanged();
}
}
我想在每次单击时开始新的活动。我该怎么做才能开始新的生活?我可以使用switch case吗?您应该在Viewholder的onClick方法中启动新活动,如下所示
public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public View view;
public TextView title;
public MyViewHolder(final View itemView) {
super(itemView);
itemView.setOnClickListener(this);
title=(TextView)itemView.findViewById(R.id.tv_title);
}
@Override
public void onClick(View view) {
// To get context. You can pass it to the adapter from activity when
// creating the instance of adapter or you can get it from Viewgroup
// inside onCreateViewHolder using parent.getContext().
startActivity(new Intent(context, NewActivity.class));
}
}
下面是一些代码和一个示例,展示了如何使用switch实现这一点。但是,要使用vertabim,您需要一个适当的回调模式——即,将onClickListener创建为一个匿名类,并将其传递给adapters构造函数。然后让适配器保留一个引用并将其传递给VH onBind
//in Adapter, Viewholder
private View.OnClickListener mCallback;
public Custom_Adapter(List<Data> dataList, View.OnClickListener callback) {
this.dataList = dataList;
mCallback = callback;
}
@Override
public void onBindViewHolder(MyViewHolder holder, final int position) {
holder.itemView.setOnClickListener(mCallback);
holder.itemView.setTag(position);
...
}
//in Activity
@Override
protected void onCreate(Bundle savedInstanceState) {
...
custom_adapter = new Custom_Adapter(dataList, new OnClickListener() {
@Override
public void onClick(View view) {
Class<? extends Activity> target;
switch( (int) view.getTag() ) {
case 0:
target = PreambleActivity.class;
break;
...
}
if (target != null) {
Intent intent = new Intent(MainActivity.this, target);
startActivity(intent);
}
}
});
}
//在适配器、Viewholder中
private View.OnClickListener mCallback;
公共自定义_适配器(列表dataList、View.OnClickListener回调){
this.dataList=dataList;
mCallback=回调;
}
@凌驾
公共无效onBindViewHolder(MyViewHolder,最终整数位置){
holder.itemView.setOnClickListener(mCallback);
holder.itemView.setTag(位置);
...
}
//活跃
@凌驾
创建时受保护的void(Bundle savedInstanceState){
...
自定义\u适配器=新的自定义\u适配器(数据列表,新OnClickListener(){
@凌驾
公共void onClick(视图){
类,该类将对每个项目硬编码相同的活动,而且startActivity也不可从中使用。将活动引用传递给适配器,只要您不做一些愚蠢的事情,例如将引用保存在适配器中的静态变量中,它就不会导致泄漏。是的,它会将新的单击侦听器附加到每个ViewHolder,这就是为什么您可以这样做。或者只是在适配器的作用域中创建一个单击侦听器并使用它(变量target可能未初始化)。如果(target!=null){Intent Intent Intent=new Intent(MainActivity.this,target);startActivity(Intent);},那么在创建它时只需将其初始化为null
public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public View view;
public TextView title;
public MyViewHolder(final View itemView) {
super(itemView);
itemView.setOnClickListener(this);
title=(TextView)itemView.findViewById(R.id.tv_title);
}
@Override
public void onClick(View view) {
// To get context. You can pass it to the adapter from activity when
// creating the instance of adapter or you can get it from Viewgroup
// inside onCreateViewHolder using parent.getContext().
startActivity(new Intent(context, NewActivity.class));
}
}
//in Adapter, Viewholder
private View.OnClickListener mCallback;
public Custom_Adapter(List<Data> dataList, View.OnClickListener callback) {
this.dataList = dataList;
mCallback = callback;
}
@Override
public void onBindViewHolder(MyViewHolder holder, final int position) {
holder.itemView.setOnClickListener(mCallback);
holder.itemView.setTag(position);
...
}
//in Activity
@Override
protected void onCreate(Bundle savedInstanceState) {
...
custom_adapter = new Custom_Adapter(dataList, new OnClickListener() {
@Override
public void onClick(View view) {
Class<? extends Activity> target;
switch( (int) view.getTag() ) {
case 0:
target = PreambleActivity.class;
break;
...
}
if (target != null) {
Intent intent = new Intent(MainActivity.this, target);
startActivity(intent);
}
}
});
}