Fragment wechseln

  • Antworten:3
  • OffenNicht stickyBentwortet
  • Forum-Beiträge: 9

13.01.2016, 00:11:59 via Website

Ich programmiere momentan an einer kleinen Android App und habe ein kleines Problem und komme nicht weiter. Ich weiß nicht ob ich den richtigen Ansatz gewählt habe, oder ob es einen komplett anderen Weg gibt der besser ist. Mir ist auch klar dass man den Code allgemein noch besser machen kann, ich bin jedoch am testen und mache ihn später noch besser.

Das Problem liegt darin, dass ich aus dem Fragment 2 heraus, wenn ein Knopf gedrückt wurde, das Fragment 1 einblenden will. Die Funktion "Fragment_Change" muss dabei "static" sein, da ich sonst nicht darauf zugreifen kann. Die Funktion "getFragmentManager" lässt sich dann jedoch nicht ausführen. Ich hoffe, dass mir irgendjemand helfen kann.

MainActivity:

public class MainActivity extends AppCompatActivity {

private DrawerLayout mDrawer;
private Toolbar toolbar;
public ActionBarDrawerToggle drawerToggle;
public String[] Listarray1 = new String[]{"Schnelles Spiel", "Statistik"},Player=new String[]{"1 Spieler","2 Spieler","3 Spieler","4 Spieler"};
public ListView ListView1;
public Spinner spinner2;
public static FragmentTransaction transaction;
public static Fragment1 fragment1;
public static Fragment2 fragment2;
public static FragmentManager fm;
public static Context AppContext;
public static int i;


private Button btn1;

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //drawerToggle=new ActionBarDrawerToggle(MainActivity.this,mDrawer,R.string.drawer_open,R.string.drawer_close);

    // Set a Toolbar to replace the ActionBar.
    toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    // Find our drawer view
    mDrawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    //drawerToggle = setupDrawerToggle();
    drawerToggle=new ActionBarDrawerToggle(MainActivity.this,mDrawer, toolbar,R.string.drawer_open,R.string.drawer_close);


    // Tie DrawerLayout events to the ActionBarToggle
    mDrawer.setDrawerListener(drawerToggle);

    ListView1 = (ListView)findViewById(R.id.Listview1);
    ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,Listarray1);
    ListView1.setAdapter(adapter);

    Fragment2 fragment2 = new Fragment2();
    Fragment1 fragment1 = new Fragment1();

    //Resources res1 = getResources();
    //Player = res1.getStringArray(R.array.Player);
    /*spinner2 = (Spinner) findViewById(R.id.spinner5);
    ArrayAdapter s_adapter= new ArrayAdapter(this,android.R.layout.simple_list_item_1,Player);
    spinner2.setAdapter(s_adapter);
    spinner2.setSelection(0);*/


    FragmentManager fm = getFragmentManager();
    transaction = fm.beginTransaction();
    transaction.add(R.id.Hauptlayout,fragment2);
    //transaction.add(R.id.Hauptlayout,fragment1, "MeinFrag_1");
    transaction.commit();

    AppContext=getApplicationContext();
}


//private ActionBarDrawerToggle setupDrawerToggle() {
//    return new ActionBarDrawerToggle(this, mDrawer, toolbar, R.string.drawer_open,  R.string.drawer_close);
//}

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    // Sync the toggle state after onRestoreInstanceState has occurred.
    drawerToggle.syncState();

}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    // Pass any configuration change to the drawer toggles
    drawerToggle.onConfigurationChanged(newConfig);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (drawerToggle.onOptionsItemSelected(item)) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}

public static void Fragment_Change(String fragment){
        fm=getFragmentManager();
    if (fragment == "fragment1"){
        transaction = fm.beginTransaction();
        transaction.remove(fragment2);
        transaction.commit();
        transaction.add(R.id.Hauptlayout, fragment1);
        transaction.commit();

    }
}
 }

Fragment:

  public class Fragment2 extends Fragment {

public Spinner spinner1;
public String[] Player=new String[]{"1 Spieler","2 Spieler","3 Spieler","4 Spieler"};
public Button btn1;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View layout = inflater.inflate(R.layout.fragment2,container,false);
    spinner1 = (Spinner) layout.findViewById(R.id.spinner3);
    ArrayAdapter s_adapter = new ArrayAdapter(this.getActivity(),android.R.layout.simple_list_item_1,Player);
    spinner1.setAdapter(s_adapter);
    spinner1.setSelection(0);

    btn1= (Button) layout.findViewById(R.id.button13);
    btn1.setOnClickListener(btnListener);


    return layout;
}

public View.OnClickListener btnListener = new View.OnClickListener() {
    public void onClick(View v) {
        String text = "";
        if (v == btn1) {
            MainActivity.Fragment_Change("fragment1");
        }
        Toast einToast = Toast.makeText(v.getContext(), text,
                Toast.LENGTH_SHORT);
        einToast.show();
    }
};
 }

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.164

13.01.2016, 12:21:21 via Website

Du machst das in der Activity, das Fragment ändern, das kanst du doch aber im Fragment selber auch machen per:
getActiviy().getFragmentManager();

Dann muss die Methode nicht statisch ein und es sollte funktionieren.

LG Pascal //It's not a bug, it's a feature. :) ;)

Jonas Liebschner

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.164

15.01.2016, 18:50:18 via App

Hallo Jonas Liebschner!

Super, wenn deine Frage geklärt ist, setze doch bitte noch deinen Thread auf "Beantwortet"!

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten

Empfohlene Artikel