Android RecyclerView on item click启动错误的活动
我是Android新手,尝试在单击Android RecyclerView on item click启动错误的活动,android,android-recyclerview,Android,Android Recyclerview,我是Android新手,尝试在单击RecyclerView项时启动新活动。单击项目后,toast出现并重定向到MainActivity,但我需要重定向到UserAdvertisementItemActivity。我错在哪里 代码来自UserAdvertisementListActivity: recyclerView.addOnItemTouchListener(new RecyclerTouchListener(getActivity().getApplicationContext(), r
RecyclerView
项时启动新活动。单击项目后,toast出现并重定向到MainActivity
,但我需要重定向到UserAdvertisementItemActivity
。我错在哪里
代码来自UserAdvertisementListActivity
:
recyclerView.addOnItemTouchListener(new RecyclerTouchListener(getActivity().getApplicationContext(), recyclerView, new RecyclerTouchListener.ClickListener() {
@Override
public void onClick(View view, int position) {
UserAdvertisementListObject advertisementList = UserAdvertisementList.get(position);
Toast.makeText(getActivity().getApplicationContext(), advertisementList.getFromCity()
+ " - " + advertisementList.getToCity() + " is selected!", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(getActivity().getApplicationContext(), UserAdvertisementItemActivity.class);
intent.putExtra("from_city", advertisementList.getFromCity());
intent.putExtra("to_city", advertisementList.getToCity());
intent.putExtra("number_of_places", advertisementList.getNumberOfPlaces());
intent.putExtra("price", advertisementList.getPrice());
intent.putExtra("datetime", advertisementList.getDatetime());
intent.putExtra("info", advertisementList.getInfo());
startActivity(intent);
getActivity().finish();
}
运行窗口:
I/Timeline: Timeline: Activity_launch_request time:411771599 intent:Intent { cmp=com.vladimirspucko.organizer/.activity.UserAdvertisementItemActivity (has extras) }
I/Toast: Show toast from OpPackageName:com.vladimirspucko.organizer, PackageName:com.vladimirspucko.organizer
I/Timeline: Timeline: Activity_launch_request time:411771685 intent:Intent { cmp=com.vladimirspucko.organizer/.activity.MainActivity }
我可以添加其他代码。如果有必要,请告诉我 有很多方法可以做到这一点 请按照以下步骤操作: 首先)在适配器内构建公共接口,然后为其创建私有实例 Second)在适配器的onBindViewHolder方法中为ViewHolder项使用setOnClickListener,并调用接口方法的 第三个)转到MainActivity并实现我们在第一步中创建的接口,然后您应该覆盖MainActivity中的接口方法,然后使用startActivity 第一步
public class YourAdapter extends RecyclerView.Adapter<YourAdapter.ViewHolder> {
public interface AdapterCallback {
void onClickCallback(UserAdvertisementListObject advertisementList);
}
private AdapterCallback adapterCallback;
//...
@Override
public void onBindViewHolder(@NonNull final ViewHolder viewHolder, final int i) {
viewHolder.YourItem.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
UserAdvertisementListObject advertisementList = UserAdvertisementList.get(i);
adapterCallback.OnClickCallBack(advertisementList);
}
});
//...
public class MainActivity extends AppCompatActivity implements YourAdapter.AdapterCallback{
@Override
public void onClickCallback(UserAdvertisementListObject advertisementList) {
Intent intent = new Intent(MainActivity.this, UserAdvertisementItemActivity.class);
intent.putExtra("from_city", advertisementList.getFromCity());
intent.putExtra("to_city", advertisementList.getToCity());
intent.putExtra("number_of_places", advertisementList.getNumberOfPlaces());
intent.putExtra("price", advertisementList.getPrice());
intent.putExtra("datetime", advertisementList.getDatetime());
intent.putExtra("info", advertisementList.getInfo());
startActivity(intent);
}
}
最后一步
public class YourAdapter extends RecyclerView.Adapter<YourAdapter.ViewHolder> {
public interface AdapterCallback {
void onClickCallback(UserAdvertisementListObject advertisementList);
}
private AdapterCallback adapterCallback;
//...
@Override
public void onBindViewHolder(@NonNull final ViewHolder viewHolder, final int i) {
viewHolder.YourItem.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
UserAdvertisementListObject advertisementList = UserAdvertisementList.get(i);
adapterCallback.OnClickCallBack(advertisementList);
}
});
//...
public class MainActivity extends AppCompatActivity implements YourAdapter.AdapterCallback{
@Override
public void onClickCallback(UserAdvertisementListObject advertisementList) {
Intent intent = new Intent(MainActivity.this, UserAdvertisementItemActivity.class);
intent.putExtra("from_city", advertisementList.getFromCity());
intent.putExtra("to_city", advertisementList.getToCity());
intent.putExtra("number_of_places", advertisementList.getNumberOfPlaces());
intent.putExtra("price", advertisementList.getPrice());
intent.putExtra("datetime", advertisementList.getDatetime());
intent.putExtra("info", advertisementList.getInfo());
startActivity(intent);
}
}
谢谢大家的帮助,对不起。这是我在
UserAdvertisementItemActivity
中的错误。我正在检查此活动
,如果用户已登录且返回false。这就是为什么应用程序将我重定向到MainActivity
。
其他代码工作正常。以下是答案:
public class YourAdapter extends RecyclerView.Adapter<YourAdapter.ViewHolder> {
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.yourView , viewGroup , false);
return new YourAdapter.ViewHolder(view);
}
//...
class ViewHolder extends RecyclerView.ViewHolder{
private TextView YourItem; // assuming that YourItem is a TextView
public ViewHolder(@NonNull View itemView) {
super(itemView);
YourItem= itemView.findViewById(R.id.YourItemId);// it is an item in the layout that you defined in onCreateViewHolder method
}
}
}
public类YourAdapter扩展了RecyclerView.Adapter{
@非空
@凌驾
public ViewHolder onCreateViewHolder(@NonNull ViewGroup ViewGroup,int i){
View-View=LayoutFlater.from(viewGroup.getContext()).inflate(R.layout.yourView,viewGroup,false);
返回新的YourAdapter.ViewHolder(视图);
}
//...
类ViewHolder扩展了RecyclerView.ViewHolder{
私有TextView YourItem;//假设YourItem是TextView
公共视图持有者(@NonNull View itemView){
超级(项目视图);
YourItem=itemView.findViewById(R.id.YourItemId);//它是在onCreateViewHolder方法中定义的布局中的项
}
}
}
您能告诉我如何分配mContext值吗?是否有适配器类?@iCantCContext Context=rootView.getContext()
和mContext=Context
@JimaleAbdi class扩展了RecyclerView.adapter
?我有这样的适配器用于RecyclerView
列表。请参考viewHolder.YourItem.setOnClickListener
第二步中的YourItem
?这是另一个问题,我将在另一个答案中回答。我希望这能有所帮助。如果可能,请选择我的答案作为正确答案,谢谢