Это мой пользовательский фрагмент:Почему я могу заменить новый фрагмент, но не инициализированный фрагмент?
Интерфейс:
public interface NotVerifiedWifiCardFragment{
void loadSSIDName(String ssid);
void setArguments(Bundle bundle);
}
Класс:
public class NotVerifiedWifiCardFragmentImpl extends Fragment implements NotVerifiedWifiCardFragment {
private TextView ssid;
private View view;
//@Inject
//NotVerifiedWifiCardPresenter presenter;
@Override
public void setArguments(Bundle args) {
super.setArguments(args);
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_card_connected_not_verified, null);
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
initView();
}
private void initView() {
ssid = (TextView) view.findViewById(R.id.card_not_verified_wifi_ssid);
Bundle bundle = getArguments();
ssid.setText(bundle.getString("SSID"));
//presenter.setView(this);
}
@Override
public void loadSSIDName(String ssid) {
this.ssid.setText(ssid);
}
}
Когда я заменить новый CustomFragment с FragmentTransaction я могу сделать это без каких-либо проблем:
@Override
public void showNotVerifiedWifiCard(String ssid) {
// Begin the transaction
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
// Replace the contents of the container with the new fragment
ft.setCustomAnimations(R.anim.slide_up_anim, R.anim.slide_down_anim);
ft.replace(R.id.main_small_card, new NotVerifiedWifiCardFragmentImpl());
// or ft.add(R.id.your_placeholder, new FooFragment());
// Complete the changes added above
ft.commit();
}
Но когда я пытаюсь позвонить в Фрагме nt Транзакция с тем же фрагментом, но инициализированная (для передачи Bundle), метод replace не позволяет мне. Как вы решаете это, когда вам нужно передать пакет с данными?
@Override
public void showNotVerifiedWifiCard(String ssid) {
Bundle bundle = new Bundle();
bundle.putString("SSID", ssid);
NotVerifiedWifiCardFragment fm = new NotVerifiedWifiCardFragmentImpl();
fm.setArguments(bundle);
// Begin the transaction
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
// Replace the contents of the container with the new fragment
ft.setCustomAnimations(R.anim.slide_up_anim, R.anim.slide_down_anim);
ft.replace(R.id.main_small_card, fm);
// or ft.add(R.id.your_placeholder, new FooFragment());
// Complete the changes added above
ft.commit();
}
Наверное, это глупый объект, ориентированный на здравый смысл, неправильно понимаемый.
EDIT: показать Ошибка:
Ошибка: Неправильный второй аргумент типа. Найдено: 'com.blabla.NotVerifiedWifiCardFragment', требуется: 'android.support.v4.app.Fragment'
'ft.replace (R.id.main_small_card, фут);' второй аргумент футов опечатка? должно быть fm. – marcinj
Какая ошибка вы получаете? Возможно, @marcinj прав, и это просто опечатка :) –
Это неправильно, это должно быть fm. Я исправлю это! Спасибо. –