взаимодействие фрагментов, есть проблемы

Activity Lifecycle, Saving Activity State, Managing Tasks, Intent, Intent Filter
Ответить
Алик
Сообщения: 1
Зарегистрирован: 15 мар 2019, 21:11

взаимодействие фрагментов, есть проблемы

Сообщение Алик » 15 мар 2019, 22:26

Пытаюсь управлять с одного фрагмента другим, не особо получается. Немного не вижу как работает моя программа, как работают фрагменты в моей программе. Делал так то по урокам все, но особенности у каждого разные. Например, я хочу что бы при нажатии кнопки в одном фрагменте язык поменялся в другом, но фрагменты на весь экран и я подозреваю что я нажимаю кнопку смены языка, оно меняет его, но при переходе из одного фрагмента в другой, то, что менялось, не сохранилось, и заново переписалось без изменений, можт я неправ - не знаю, поэтому и спрашиваю)

вот так выглядит Аctivity

package com.example.fuelcalc;
import android.os.Bundle;
import android.support.design.widget.NavigationView;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import com.example.fuelcalc.Fragments.FragmentCalc;
import com.example.fuelcalc.Fragments.FragmentHistory;
import com.example.fuelcalc.Fragments.FragmentInfo;
import com.example.fuelcalc.Fragments.FragmentLanguage;
public class Home extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
private FragmentManager manager;
private FragmentTransaction transaction;
FragmentInfo finfo;
FragmentHistory fhistory;
FragmentCalc fcalc;
FragmentLanguage flanguage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
fcalc = new FragmentCalc();
android.support.v4.app.FragmentTransaction ftrans = getSupportFragmentManager().beginTransaction();
ftrans.add(R.id.container,fcalc);
ftrans.commit();
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
manager = getSupportFragmentManager();
initFragmentLast ();
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);
toggle.syncState();
fcalc = new FragmentCalc();
flanguage = new FragmentLanguage();
fhistory = new FragmentHistory();
finfo = new FragmentInfo();
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
}
private void initFragmentLast() {
transaction = manager.beginTransaction();
transaction.add(R.id.container ,new FragmentCalc());
transaction.add(R.id.container ,new FragmentLanguage());
}
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.home, menu);
return true;
}
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
int id = item.getItemId();
android.support.v4.app.FragmentTransaction ftrans = getSupportFragmentManager().beginTransaction();
if (id == R.id.nav_camera) {
ftrans.replace(R.id.container, fcalc);
} else if (id == R.id.nav_gallery) {
ftrans.replace(R.id.container, flanguage);
} else if (id == R.id.nav_slideshow) {
ftrans.replace(R.id.container,finfo);
} else if (id == R.id.nav_manage) {
ftrans.replace(R.id.container, fhistory);
}
ftrans.commit();
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
}

ЭТО ОБРАБОТЧИК В ПРОБЛЕМНОМ ФРАГМЕНТЕ

button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(getContext(), "English", Toast.LENGTH_SHORT).show();
Fragment frag1 = getFragmentManager().findFragmentById(R.id.FragmentCalc);
final TextView textView5 = (TextView) getActivity().findViewById(R.id.textView5);
final TextView textView6 = (TextView) getActivity().findViewById(R.id.textView6);
final TextView textView7 = (TextView) getActivity().findViewById(R.id.textView7);
String S = "Enter the desired distance";
String S1 = "Enter the price per liter of fuel";
String S2 = "Enter the consumption of your car for 100 km";
((TextView)frag1.getView().findViewById(R.id.textView2)).setText("Enter the desired distance");
textView6.setText(S1);
textView7.setText(S2);
}
});

Моя цель нажать на кнопку и поменять язык в другой вкладке по трем пунктам, я нажимаю, через тоаст показывает что кнопка нажата, перехожу в тот фрагмент где я пытался изменить язык, а он тот самый, то есть не изменился. Какие у кого виденья этой ситуации? Зарание благодарен

Ответить