Как я могу передать данные из переработчика в фрагмент - PullRequest
0 голосов
/ 27 мая 2019

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

        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;

}

}

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

Ответы [ 2 ]

1 голос
/ 27 мая 2019

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

// 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");
0 голосов
/ 28 мая 2019

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

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

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

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

// aka Пропустить весь вид через интерфейс

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

void itemContact(View mView);

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...