Как я могу передать данные из recyclerview во фрагмент

Я следую учебнику YouTube, чтобы написать приложение. эти коды являются частью моего recyclerViewAdapter

        vHolder.item_contact.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            TextView dialog_name_tv = (TextView) myDialog.findViewById(R.id.dialog_name_id);
            TextView dialog_phone_tv = (TextView) myDialog.findViewById(R.id.dialog_phone_id);
            ImageView dialog_contact_img = (ImageView) myDialog.findViewById(R.id.dialog_img);
            TextView dialog_detail_tv = (TextView) myDialog.findViewById(R.id.dialog_detail);
            dialog_name_tv.setText(mData.get(vHolder.getAdapterPosition()).getName());
            dialog_phone_tv.setText(mData.get(vHolder.getAdapterPosition()).getPhone());
            dialog_contact_img.setImageResource(mData.get(vHolder.getAdapterPosition()).getPhoto());
            dialog_detail_tv.setText(mData.get(vHolder.getAdapterPosition()).getDetail());
            Toast.makeText(mContext, "Test Click" + String.valueOf(vHolder.getAdapterPosition()), Toast.LENGTH_SHORT).show();
            myDialog.show();
            Button dialog_add_tv = (Button) myDialog.findViewById(R.id.dialog_add);
            dialog_add_tv.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    EditText dialog_quantity_tv = (EditText) myDialog.findViewById(R.id.dialog_quantity);
                    quantity = dialog_quantity_tv.getText().toString();
                    name = mData.get(vHolder.getAdapterPosition()).getName()+"\n";
                    price = mData.get(vHolder.getAdapterPosition()).getPhone();
                    Intent i = new 
                    Intent(getActivity(),FragmentFav.class);
                    Bundle bundle = new Bundle();
                    bundle.putString("choices",choices);
                    bundle.putDouble("price",price);
                    i.putExtras(bundle);
                    startActivity(i);


                }
            });

        }
    });



    return vHolder;
}

Я хочу нажать кнопку dialog_add_tv, чтобы передать данные во фрагмент.класс

public class FragmentFav extends Fragment {

View v;

public FragmentFav() {
}

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    v = inflater.inflate(R.layout.call_fragment, container, false);
    return v;

}

}

Я пытаюсь много раз, используя намерение, все еще происходит ошибка.

Вы не можете вызвать startActivity на Intent, которому вы передаете свой FragmentFav. Вам нужен Activity, который содержит FragmentFav, и вместо этого вам нужно запустить его.

Advice-Dog 27.05.2019 20:30
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
153
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Используя намерение, вы не можете открыть фрагмент, используйте приведенный ниже код для открытого фрагмента, а также передайте данные во фрагмент

// define a framelayout in activity xml

  <FrameLayout
   android:layout_width = "match_parent"
   android:layout_height = "match_parent"
   android:id = "@+id/fragment_container"></FrameLayout>

 // then write below code on the click of dialog_add_tv button

 Bundle bundle = new Bundle();
 bundle.putString("choices",choices);
 bundle.putDouble("price",price);

 FragmentFav frgFav=new  FragmentFav();
 frgFav.setArguments(bundle);

 FragmentTransaction fragmentTrasaction=getFragmentManager().beginTransaction();
 fragmentTrasaction.add(R.id.fragment_container,frgFav,"frg");
 fragmentTrasaction.commit();


// then get data in fragment like this
 String choice=getArguments().getString("choices");
 String price=getArguments().getString("price");

Вот шаг, которому вы можете следовать и реализовать то, что вам нужно

Шаг 1: Создайте интерфейс между адаптером и фрагментом

Шаг 2: Реализуйте интерфейс в адаптере следующим образом:

 vHolder.item_contact.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
       mProfileItemClickListener.itemContact(v);
 }

// иначе передать весь вид через интерфейс

Шаг 3: В интерфейсе класса добавьте этот метод

void itemContact(View mView);

Шаг 4: Реализовать интерфейс во фрагменте:

  • Где вы получите метод переопределения и выполните свою операцию там

    @Override public void itemContact (ImageView mProfileImageView) { Ваш код здесь }

Вы можете правильно обрабатывать обратный вызов при передаче данных между представлениями.

Другие вопросы по теме