2016-03-19 3 views
4

Я уже хочу запустить свой RecipientFragment из моей MainActivity и передать данные на Фрагмент из моей MainActivity. Вот код, который я реализовал. Но фрагмент не начинается.Как начать Фрагмент из-за активности

Bundle bundle = new Bundle(); 
      bundle.putString(ParseConstants.KEY_FILE_TYPE, fileType); 
      RecipientsFragment keyfile = new RecipientsFragment(); 
      keyfile.setArguments(bundle); 
      Fragment newFragment = new RecipientsFragment(); 
      FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
      transaction.commit(); 

Я также хочу знать, как пройти aim.setData и получить эти данные в фрагменте. В настоящее время у меня есть этот код.

RecipientFragment

mMediaUri = getActivity().getIntent().getData(); 

MainActivity

Intent recipientsIntent = new Intent(this, RecipientsFragment.class); 
     recipientsIntent.setData(mMediaUri); 
+0

Но вы не добавили код для добавления или замены фрагмента в любом месте? –

ответ

15

Вы можете добавить или заменить фрагмент в вашей деятельности. Создание FrameLayout в рабочем месте: xml.

Затем сделать это в вашей деятельности в добавить фрагмент:

FragmentManager manager = getFragmentManager(); 
FragmentTransaction transaction = manager.beginTransaction(); 
transaction.add(R.id.container,YOUR_FRAGMENT_NAME,YOUR_FRAGMENT_STRING_TAG); 
transaction.addToBackStack(null); 
transaction.commit(); 

И заменить фрагмент сделать это:

FragmentManager manager = getFragmentManager(); 
FragmentTransaction transaction = manager.beginTransaction(); 
transaction.replace(R.id.container,YOUR_FRAGMENT_NAME,YOUR_FRAGMENT_STRING_TAG); 
transaction.addToBackStack(null); 
transaction.commit(); 

См следующие связанные вопросы по SO:

Difference between add(), replace(), and addToBackStack()

Basic difference between add() and replace() method of Fragment

Difference between add() & replace() with Fragment's lifecycle

Android Documentation

0

Вы можете начать активность и прикрепить RecipientsFragment на нем, но вы не можете запустить фрагмент

2

Во-первых, вы начинаете деятельности и услуг с Вы начинаете фрагменты с транзакциями фрагментов. Во-вторых, ваша сделка не делает ничего. Измените его на что-то вроде:

FragmentTransaction transaction = getFragmentManager(); 
    transaction.beginTransaction() 
     .replace(R.layout.container, newFragment) //<---replace a view in your layout (id: container) with the newFragment 
     .commit(); 
0

Простой способ

  1. Создание нового класса Java

    public class ActivityName extends FragmentActivity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        if (savedInstanceState == null){ 
        getSupportFragmentManager().beginTransaction() 
          .add(android.R.id.content, new Fragment_name_which_you_wantto_open()).commit();} 
    } 
    } 
    
  2. в йо ур деятельность, где и хотите вызвать фрагментировать

    Intent i = new Intent(Currentactivityname.this,ActivityName.class); 
    startActivity(i); 
    

Другой метод

  1. Место кадр макет в вашей деятельности, где и хотят, чтобы открыть фрагмент,

    <FrameLayout 
         android:id="@+id/frameLayout" 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content"> 
        </FrameLayout> 
    
  2. Вставьте этот код где u хочет открыть фрагмент

    Fragment mFragment = null; 
         mFragment = new Name_of_fragment_which_you_want_to_open(); 
         FragmentManager fragmentManager = getSupportFragmentManager(); 
         fragmentManager.beginTransaction() 
           .replace(R.id.frameLayout, mFragment).commit(); 
    
+0

Я думаю, что мы должны также определить это имя класса в манифесте для первого пути – mehmet

Смежные вопросы