web-dev-qa-db-fra.com

Android Comment appeler Fragment à partir de mon activité principale

je suis très nouveau dans le développement Android.

dans mon cas, j'ai une activité principale et un fragment créé. Activité principale sous forme de deux boutons.

quand je clique sur le bouton, mon fragment devrait se charger. comment puis-je y parvenir?

Mainactivité .XML

<Button
 Android:layout_width="wrap_content"
 Android:layout_height="wrap_content"
    Android:text="Fragment 2"
    Android:id="@+id/fragment_button_2"
    Android:layout_centerVertical="true"
    Android:layout_centerHorizontal="true" />

<Button
    style="?android:attr/buttonStyleSmall"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:text="Fragment 1"
    Android:id="@+id/fragment_button_1"
    Android:layout_above="@+id/fragment_button_2"
    Android:layout_alignLeft="@+id/fragment_button_2"
    Android:layout_alignStart="@+id/fragment_button_2"
    Android:layout_marginBottom="33dp" />
</RelativeLayout>

Activité principale .Java

package com.bentgeorge.fragment;

import Android.support.v7.app.AppCompatActivity;
import Android.os.Bundle;
import Android.view.View;
import Android.widget.Button;

public class MainActivity extends AppCompatActivity implements    View.OnClickListener{
private Button fragment_btn_1;
private Button fragment_btn_2;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    fragment_btn_1 = (Button) findViewById(R.id.fragment_button_1);
    fragment_btn_2 = (Button) findViewById(R.id.fragment_button_2);


}

@Override
public void onClick(View v) {

Fragment1 frag = new Fragment1();
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.add(R.id.mainlayout,frag,"Test Fragment");
transaction.commit();

}
}

fragment_fragment1.xml

<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
tools:context="com.bentgeorge.fragment.Fragment1">

<!-- TODO: Update blank fragment layout -->
<TextView
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:text="@string/hello_blank_fragment" />

</FrameLayout>

Fragment1.Java

package com.bentgeorge.fragment;


import Android.os.Bundle;
import Android.support.v4.app.Fragment;
import Android.view.LayoutInflater;
import Android.view.View;
import Android.view.ViewGroup;


/**
* A simple {@link Fragment} subclass.
*/
public class Fragment1 extends Fragment {


public Fragment1() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_fragment1, container,  false);
}

}

Pas beaucoup de codes car je suis confondu avec les tutoriels disponibles sur Internet.

S'il vous plaît aidez-moi à résoudre ce problème 

Merci et salutations

Mettre à jour:

j'ai fait quelques changements et mon fragment est en train d'être chargé maintenant. Mais les boutons sont toujours visibles. Comment puis-je cacher les boutons

 Fragment

4
bentech4u

Mise à jour: Veuillez modifier votre MainActivity comme suit: 

  public class MainActivity extends AppCompatActivity  {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Fragment fragment = new MainFragment();
            getSupportFragmentManager().beginTransaction()
                    .replace(R.id.fragment_frame, fragment, fragment.getClass().getSimpleName()).addToBackStack(null).commit();

        }
    }

Changez votre activity_main.xml comme suit:

<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"                
Android:id="@+id/fragment_frame"            
Android:layout_width="match_parent"
            Android:layout_height="match_parent" />

Veuillez créer un fichier xml fragment_main.xml:

  <RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"                
                Android:layout_width="match_parent"
                Android:layout_height="match_parent" >
    <Button
     Android:layout_width="wrap_content"
     Android:layout_height="wrap_content"
        Android:text="Fragment 2"
        Android:id="@+id/fragment_button_2"
        Android:layout_centerVertical="true"
        Android:layout_centerHorizontal="true" />

    <Button
        style="?android:attr/buttonStyleSmall"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="Fragment 1"
        Android:id="@+id/fragment_button_1"
        Android:layout_above="@+id/fragment_button_2"
        Android:layout_alignLeft="@+id/fragment_button_2"
        Android:layout_alignStart="@+id/fragment_button_2"
        Android:layout_marginBottom="33dp" />
    </RelativeLayout>

Créez également un fragment en tant que MainFragment:

public class MainFragment extends Fragment implements View.OnClickListener{
     private Button fragment_btn_1;
        private Button fragment_btn_2;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_main, container, false);
        fragment_btn_1 = (Button) view.findViewById(R.id.fragment_button_1);
            fragment_btn_2 = (Button) view.findViewById(R.id.fragment_button_2);
            fragment_btn_1.setOnClickListener(this);
            fragment_btn_2.setOnClickListener(this);
        return view;
    }
@Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.fragment_button_1:
                    Fragment fragment1 = new Fragment1();
                    moveToFragment(fragment1);
                    break;
                case R.id.fragment_button_2:
                    Fragment fragment2 = new Fragment2();
                    moveToFragment(fragment2);
                    break;
            }
        }

        private void moveToFragment(Fragment fragment) {
            getSupportFragmentManager().beginTransaction()
                    .replace(R.id.fragment_frame, fragment, fragment.getClass().getSimpleName()).addToBackStack(null).commit();

        }
}

J'espère que cela vous aidera. Si vous avez des questions, faites le moi savoir.

10
RIJO RV

dans vous méthode onClick () - 

if(v.getId()==R.id.fragment_button_1){
getActivity().getSupportFragmentManager().beginTransaction()
                            .add(R.id.fragment_frame, new Fragment1(), "createPost").addToBackStack(null).commit();
              }

où R.id.fragment_frame - rootContainer Id rootView dans MainActivity.Java

vous devriez utiliser Framelayout pour placer un fragment en activité.

comme ci-dessous - activity_layout.xml - 

<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:id="@+id/root_layout"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    tools:context="com.myapplication.Activities.TestActivity">

    <LinearLayout
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_margin="40dp"
        Android:orientation="vertical">

        <Button
            Android:id="@+id/button1"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_centerInParent="true"
            Android:text="Button 1" />

        <Button
            Android:id="@+id/button2"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_below="@id/button1"
            Android:layout_centerHorizontal="true"
            Android:text="Button 1" />

    </LinearLayout>

</FrameLayout>

et votre activité - MainActivity.Java

import Android.support.v7.app.AppCompatActivity;
import Android.os.Bundle;
import Android.view.Menu;
import Android.view.MenuItem;
import Android.view.View;
import Android.widget.Button;


public class TestActivity extends AppCompatActivity implements View.OnClickListener{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);

        Button button1 = (Button) findViewById(R.id.button1);
        Button button2 = (Button) findViewById(R.id.button2);
        button1.setOnClickListener(this);
        button2.setOnClickListener(this);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_test, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onClick(View v) {
        if (v.getId() == R.id.button1){
            getSupportFragmentManager().beginTransaction().
                    replace(R.id.root_layout, new Fragment1()).commit();
        }
    }
}

btw votre fragment a l'air bien. espérons que cela vous aidera.

3
Vikram Bhati

Créez une autre activité, par exemple ExampleFragmentActivity.class, et incluez la balise fragment dans la présentation de ExampleFragmentActivity dans Framelayout.

public class ExampleFragmentActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.example_feagment_activity);
    }
}

example_fragment_activity.xml (modifié)

    <FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
            xmlns:tools="http://schemas.Android.com/tools"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            tools:context="com.bentgeorge.fragment.Fragment1">

            <fragment
                Android:id="@+id/titles"
                class="com.bentgeorge.fragment.Fragment1"
                Android:layout_width="match_parent"
                Android:layout_height="match_parent" />
    </FrameLayout>

Dans la méthode Onclick de votre MainAcitivity.class 

Intent intent = new Intent(MainAcitivity.this,ExampleFragmentActivity.class);

Vous pouvez également inclure des fragments de manière dynamique à l'aide du gestionnaire de fragments.

FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Fragment1 fragment1 = new Fragment1();
fragmentTransaction.add(R.id.fragment_container, fragment1, "fragment");
fragmentTransaction.commit();
0
WritingForAnroid
 FragmentTransaction fragmenttransaction = getSupportFragmentManager().beginTransaction();
   HomeFragment regcomplainfragment = new HomeFragment();
   fragmenttransaction.replace(R.id.content_frame, regcomplainfragment).addToBackStack("HomeFragment");
   fragmenttransaction.commit();
0
Brinda Rathod

Vous ne pouvez pas appeler Fragments via Intent. Fragment fait partie d'un FragmentActivity.

Dans l'ensemble, Fragment est un contenu et non un conteneur. Vous devez donc créer une FragmentActivity et y ajouter Fragment (Fragment1), puis appeler votre onClick (),

Intent intent = new Intent(MainActivity.this, SomeFragmentActivity.class);
startActivity(intent);

Plus d'infos: ici

0
Sathish Kumar J

utilisez getActivity () à partir du fragment pour accéder aux fonctions d'activité. Si vous souhaitez accéder à des fonctions spécifiques à votre propre classe d'activité. Lancez l'objet d'acticité que vous obtenez avant de l'utiliser, voir l'exemple ci-dessous

MyActivityClass myActivity = (MyActivityClass) getActivity();
0
J Whitfield