2016-03-16 1 views
3

Я в моем классе фрагмента называет это:Передача данных фрагмента с FragmentTransaction

@OnClick(R.id.blockedLinkLayout) 
public void onBlockedClick(){ 
    final FragmentTransaction ft = getFragmentManager().beginTransaction(); 
    ft.replace(R.id.content, new SettingsBlockedUsersFragment(), FRAGMENT_TAG); 
    ft.commit(); 
} 

И просто заменить мой текущий фрагмент с выбраными один.

И мой вопрос: как я могу отправить некоторые данные (например, String значение) из моего родительского фрагмента в мой дочерний фрагмент, используя FragmentTransaction?

ответ

11

Просто пройти их в узелок в качестве аргументов осколочных

в исходном фрагменте:

SettingsBlockedUsersFragment fragment = new SettingsBlockedUsersFragment(); 
Bundle arguments = new Bundle(); 
arguments.putString(string_key , desired_string); 
fragment.setArguments(arguments); 
final FragmentTransaction ft = getFragmentManager().beginTransaction(); 
ft.replace(R.id.content, fragment , FRAGMENT_TAG); 
ft.commit(); 

в фрагменте ребенка:

Bundle arguments = getArguments(); 
String desired_string = arguments.getString(string_key); 
+0

Это работает! Что делать, если я хочу отправить, например. HashMap oraz ArrayList? – y07k2

+0

вы можете использовать arguments.putStringArrayList (ключ, значение); , обратите внимание, что пучок ограничивается простыми значениями типа String или int. – Mahfa

+0

Так что мне нужно изменить тип Bundle на что? – y07k2

1

FragmentTransaction - это просто переход Фрагментов, он ничего не пропускает. Вам нужно использовать Bundle.

SettingsBlockedUsersFragment frag = new SettingsBlockedUsersFragment(); 
Bundle b = new Bundle(); 
// put stuff into bundle... 
b.putString("user", "steve"); 

// Pass the bundle to the Fragment 
frag.setArguments(b); 

// Use Fragment Transaction 
final FragmentTransaction ft = getFragmentManager().beginTransaction(); 
ft.replace(R.id.content, frag, FRAGMENT_TAG); 
ft.commit(); 

Тогда внутри OnCreate фрагмента, вы можете сделать

String user = getArguments().getString("user"); 

Другие способы для передачи данных в фрагмент обсуждаются на Best practice for instantiating a new Android Fragment

+0

Я думаю, что вы хотите сказать '' FragmentTransaction' не FragmentTransition' –

0

вы можете использовать фабричный метод в классе фрагмента (как рекомендовано в документации)

public static YourFragment newInstance(String sample) { 
    YourFragment fragment = new YourFragment(); 
    Bundle args = new Bundle(); 
    args.putString(KEY, sample); 
    fragment.setArguments(args); 
    return fragment; 
} 

затем называют YourFragment.newInstance ("строка вам необходимо пройти «); получить экземпляр вашего фрагмента и использовать его в вашей транзакции.

Ключевым здесь является использование метода setArguments() для передачи данных. вы можете получить эти данные в OnCreate метод вашего фрагмента, как этот

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (getArguments() != null) { 
     streamSource = getArguments().getParcelable(KEY); 
    } 
} 
0

В вашем SettingsBlockedUsersFragment классе есть статический метод как следующий

public class SettingsBlockedUsersFragment extends Fragment { 
    private static final String MY_STRING = "my_string"; 


    public static SettingsBlockedUsersFragment newInstance(String yourStringValue){ 
     SettingsBlockedUsersFragment frag = new SettingsBlockedUsersFragment(); 
     Bundle args = new Bundle(); 
     args.putString(MY_STRING, yourStringValue); 
     frag.setArguments(args); 
     return frag; 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState){ 
      Bundle args = getArguments(); 
      if(args != null){ 
       String myString = args.getString(MY_STRING); 
      } 
    } 
} 

В транзакции фрагмент вы можете передать арг, как это

final FragmentTransaction ft = getFragmentManager().beginTransaction(); 
ft.replace(R.id.content,SettingsBlockedUsersFragment.newInstance("my string"), FRAGMENT_TAG); 
ft.commit(); 

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

  • Нет связанных вопросов^_^