Я следую учебнику 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;
}
}
Я пытаюсь много раз, используя намерение, все еще происходит ошибка.
Используя намерение, вы не можете открыть фрагмент, используйте приведенный ниже код для открытого фрагмента, а также передайте данные во фрагмент
// 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) { Ваш код здесь }
Вы можете правильно обрабатывать обратный вызов при передаче данных между представлениями.
Вы не можете вызвать
startActivity
наIntent
, которому вы передаете свойFragmentFav
. Вам нуженActivity
, который содержитFragmentFav
, и вместо этого вам нужно запустить его.