В моем приложении для Android у меня есть два фрагмента. Один фрагмент имеет onClickListener, и по существу то, что я пытаюсь сделать, это создать счетчик/журнал сортировок. Каждый раз, когда нажимается кнопка, я хочу обновить целое число, а затем передать String.valueOf (integer) в TextView в другом фрагменте.Передача данных из фрагмента в фрагмент через кнопку Нажмите
Вот первый фрагмент, с onClickListener:
public class StartingFragment extends Fragment implements View.OnClickListener {
public static final String TEA_TYPE_POS = "tea_navdrawer_position";
public static int COUNT = 0;
private TeaCounterFragment mTeaCounterFragment;
// onCreateView method - Returning the layout file
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflating the layout
View v = inflater.inflate(R.layout.starting_fragment, container, false);
/* From this point, you do everything in regards to the "v" object */
Button tea_type1 = (Button) v.findViewById(R.id.tea_type1);
Button tea_type2 = (Button) v.findViewById(R.id.tea_type2);
Button tea_type3 = (Button) v.findViewById(R.id.tea_type3);
Button tea_type4 = (Button) v.findViewById(R.id.tea_type4);
Button tea_type5 = (Button) v.findViewById(R.id.tea_type5);
Button tea_type6 = (Button) v.findViewById(R.id.tea_type6);
Button tea_type7 = (Button) v.findViewById(R.id.tea_type7);
Button set_timer = (Button) v.findViewById(R.id.set_your_own_timer);
tea_type1.setText("Oolong");
tea_type1.setOnClickListener(this);
tea_type2.setText("White");
tea_type2.setOnClickListener(this);
tea_type3.setText("Blooming");
tea_type3.setOnClickListener(this);
tea_type4.setText("Black");
tea_type4.setOnClickListener(this);
tea_type5.setText("Herbal");
tea_type5.setOnClickListener(this);
tea_type6.setText("Green");
tea_type6.setOnClickListener(this);
tea_type7.setText("Mate");
tea_type7.setOnClickListener(this);
set_timer.setText("Set Your Own Timer");
set_timer.setOnClickListener(this);
/* Do your manipulation to your views here, onClick listeners and such */
// Return the "v" object
return v;
}
@Override
public void onClick(View view) {
switch (view.getId()) {
/*
* Use the View interface with OnClickListener to get the Button ID's
* Then you can run a switch on the Buttons (because normally switches
* cannot be run on buttons
*/
case R.id.tea_type1:
Builder oolongBuilder = new AlertDialog.Builder(StartingFragment.this.getActivity(),
AlertDialog.THEME_HOLO_LIGHT);
oolongBuilder.setPositiveButton("Hot",
//Starts OolongTeaActivity for hot tea when clicked
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
Intent i = new Intent(StartingFragment.this.getActivity(),
OolongTeaActivity.class);
StartingFragment.this.getActivity().startActivity(i);
}
});
oolongBuilder.setNeutralButton("Iced",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent i = new Intent(StartingFragment.this.getActivity(),
ColdOolongTeaActivity.class);
StartingFragment.this.getActivity().startActivity(i);
}
});
oolongBuilder.setTitle("Oolong Tea");
oolongBuilder.setMessage("How Do You Like Your Tea?");
AlertDialog oolongDialog = oolongBuilder.create();
oolongDialog.show();
COUNT++;
Fragment fragment = new Fragment();
final Bundle bundle = new Bundle();
bundle.putString("id_User", String.valueOf(COUNT));
Log.i("BUNDLE", bundle.toString());
fragment.setArguments(bundle);
break;
и фрагмент, к которому я хочу valueOf (целое число), чтобы пойти.
public class TeaCounterFragment extends Fragment {
public TeaCounterFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_tea_counter, container, false);
TextView oolongCounterText = (TextView) rootView.findViewById(R.id.counter_tv);
Bundle args = getArguments();
if (args != null && args.containsKey("id_User")){
String userId = args.getString("id_User");
oolongCounterText.setText(userId);
}
return rootView;
}
Я понял, что TextView будет установлен обратно в исходное состояние, но если я могу по крайней мере, получить его обновить после нажатия кнопки, то я могу понять, как сохранить его навсегда в более позднее время.
Я просмотрел документацию разработчика Android, и он говорит, что два фрагмента не должны связываться напрямую, но я не понимаю, почему метод, который я использую прямо сейчас, не должен работать.
EDIT: Попытался другой способ решить эту проблему, но я получаю исключение NullPointerException. Я решил создать интерфейс в одном фрагменте, а через класс NavDrawer (MainActivity) я попытался обновить TextView.
pastebin.com/1dx5rEVv (MainActivity) --- pastebin.com/7wKW1zq1 (StartingFragment)
На данный момент, я просто хочу, чтобы обновить TextView (и держать его даже после того, как приложение будет полностью закрыто) с использованием любого подхода или подхода, еще не используется.
Как бы использовать тот же экземпляр, если он создается в другом фрагменте? Если я создаю новый объект TeaCounterFragment, в другом фрагменте под названием StartingFragment, как использовать тот же экземпляр из класса TeaCounterFragment. – freddiev4
Используйте FragmentManager, Лучше сначала пройдите через любой учебник, чтобы понять Фрагменты. –
Oooh. ОК. Я понимаю Фрагменты, просто я не совсем уверен, как подойти к нему (+ ментальный блок) – freddiev4