RecyclerView при нажатии элемента запускает неправильную активность - PullRequest
0 голосов
/ 30 апреля 2019

Я новичок в 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 }

Я могу добавить другой код.Просто дайте мне знать об этом, если это необходимо!

Ответы [ 3 ]

0 голосов
/ 02 мая 2019

Спасибо всем за помощь и извините. Это моя ошибка в UserAdvertisementItemActivity. Я проверяю в этом Activity, если пользователь вошел в систему и вернул false. Вот почему приложение перенаправило меня на MainActivity. Другой код работает нормально.

0 голосов
/ 03 мая 2019

Вот ответ:

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


        }


    }
}
0 голосов
/ 02 мая 2019

Существует много способов сделать это ...

выполните следующие шаги, пожалуйста:

Сначала) создать публичный интерфейс внутри вашего адаптера, а затем создать для него личный экземпляр

Секунда) используйте setOnClickListener для вашего элемента ViewHolder внутри метода onBindViewHolder в вашем адаптере и вызовите один из методов интерфейса

Третье) перейдите к 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...