Android RecyclerView on item click启动错误的活动

Android RecyclerView on item click启动错误的活动,android,android-recyclerview,Android,Android Recyclerview,我是Android新手,尝试在单击RecyclerView项时启动新活动。单击项目后,toast出现并重定向到MainActivity,但我需要重定向到UserAdvertisementItemActivity。我错在哪里 代码来自UserAdvertisementListActivity: recyclerView.addOnItemTouchListener(new RecyclerTouchListener(getActivity().getApplicationContext(), r

我是Android新手,尝试在单击
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值吗?是否有适配器类?@iCantC
Context Context=rootView.getContext()
mContext=Context
@JimaleAbdi class
扩展了RecyclerView.adapter
?我有这样的适配器用于
RecyclerView
列表。请参考
viewHolder.YourItem.setOnClickListener
第二步中的
YourItem
?这是另一个问题,我将在另一个答案中回答。我希望这能有所帮助。如果可能,请选择我的答案作为正确答案,谢谢