我是Android的新手,并在单击RecyclerView
项目时尝试启动新活动。单击项目后,出现吐司并将其重定向到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方法的视图持有人的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);
}
}
感谢大家的帮助和抱歉。这是我在UserAdvertisementItemActivity
中的错误。如果用户已登录并返回false,我正在检查此Activity
。这就是为什么应用将我重定向到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
}
}
}