android - studio - set fragment id xml




Como definir uma tag Fragment por código? (5)

Eu não encontrei algo como o setTag(String tagName) na classe Fragment . A única maneira de definir uma tag Fragment que eu encontrei é fazendo um FragmentTransaction e passando um nome de tag como parâmetro.

Esta é a única maneira de definir explicitamente uma tag Fragment por código?


Esta é a melhor maneira que encontrei:

   public class MainActivity extends AppCompatActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (savedInstanceState == null) {
          // Let's first dynamically add a fragment into a frame container
          getSupportFragmentManager().beginTransaction(). 
              replace(R.id.flContainer, new DemoFragment(), "SOMETAG").
              commit();
          // Now later we can lookup the fragment by tag
          DemoFragment fragmentDemo = (DemoFragment) 
              getSupportFragmentManager().findFragmentByTag("SOMETAG");
        }
    }
}

Eu sei que tem sido há 6 anos, mas se alguém está enfrentando o mesmo problema, como eu fiz:

-Crie uma classe de Fragment personalizada com um campo de tag:

public class MyFragment extends Fragment {
 private String _myTag;
 public void setMyTag(String value)
 {
   if("".equals(value))
     return;
   _myTag = value;
 }
 //other code goes here
}

-Antes de adicionar o fragmento ao sectionPagerAdapter defina a tag da seguinte forma:

 MyFragment mfrag= new MyFragment();
 mfrag.setMyTag("TAG_GOES_HERE");
 sectionPagerAdapter.AddFragment(mfrag);

Você pode adicionar a tag como uma propriedade para os argumentos Fragment . Ele será restaurado automaticamente se o fragmento for destruído e depois recriado pelo sistema operacional .

Exemplo : -

    final Bundle args = new Bundle();
    args.putString("TAG", "my tag");
    fragment.setArguments(args);

Você pode definir a tag como fragmentada desta maneira:

Fragment fragmentA = new FragmentA();
getFragmentManager().beginTransaction()
    .replace(R.id.MainFrameLayout,fragmentA,"YOUR_TARGET_FRAGMENT_TAG")
    .addToBackStack("YOUR_SOURCE_FRAGMENT_TAG").commit(); 

Você também pode obter todos os fragmentos como este:

Para fragmentos v4

List<Fragment> allFragments = getSupportFragmentManager().getFragments();

Para app.fragment

List<Fragment> allFragments = getFragmentManager().getFragments();




android-fragments