При вызове фрагмента отображается только белый экран

#android #android-fragments

#Android #android-фрагменты

Вопрос:

Я создаю страницу входа с фрагментами, но всякий раз, когда я запускаю приложение, я получаю только белую осыпь, без текста редактирования, без кнопок.

LoginFragment

 public class LoginFragment extends Fragment {

    private View view;
    private Button btcancel;
    private EditText etpassword;
    private Button btlogin;
    private EditText etusername;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        view=inflater.inflate(R.layout.login_frag,container,false);
        return view;
    }

    private void initialize() {

        btcancel = (Button) getActivity().findViewById(R.id.bt_cancel);
        etpassword = (EditText) getActivity().findViewById(R.id.et_password);
        btlogin = (Button) getActivity().findViewById(R.id.bt_login);
        etusername = (EditText) getActivity().findViewById(R.id.et_user_name);
    }
}
  

LoginActivity

 public class LoginActivity extends Activity {
    private FragmentTransaction fragmentTransaction;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        fragmentSetUp();
    }

    private void fragmentSetUp() {
        fragmentTransaction=getFragmentManager().beginTransaction();
        LoginFragment loginFragment=new LoginFragment();
        fragmentTransaction.add(loginFragment,"login").commit();
    }
}
  

Ответ №1:

Для размещения фрагмента у вас должен быть родительский макет, но в вашем случае вы можете использовать макет Android по умолчанию в качестве родительского контейнера для фрагмента.

решение:

     fragmentTransaction=getFragmentManager().beginTransaction();
    LoginFragment loginFragment=new LoginFragment();
    fragmentTransaction.add(android.R.id.content,loginFragment,"login").commit();
  

Комментарии:

1. @Anuj для меня, да, это для создания большей глубины в вашем дизайне.

2. @Anuj да, вам также нужно установить его в качестве макета в вашей активности, вызвав setContentView (). следуйте этой теме, чтобы начать developer.android.com/guide/components/fragments.html

Ответ №2:

вероятно, это потому, что вы пропустили setContentView для activity . Внутри макета вы должны объявить контейнер, в который вы можете добавлять / заменять Fragment файлы. Также в LoginFragment вы используете getActivity для извлечения компонента фрагмента. Вы должны использовать раздутый вид. Лучший способ, imo, переопределить onCreatedView

Комментарии:

1. но я создал только 1 макет для операции входа в систему

Ответ №3:

Вы также можете использовать —

 fragmentTransaction=getFragmentManager().beginTransaction();
    LoginFragment loginFragment=new LoginFragment();
    fragmentTransaction.add(0,loginFragment,"login").commit();
  

Транзакция фрагмента —

добавить общедоступную абстрактную фрагментную транзакцию (int containerViewId, фрагмент Fragment, тег String)

Добавлено на уровне API 11 Для добавления фрагмента в состояние активности. Этот фрагмент может необязательно также иметь свое представление (если Fragment.onCreateView возвращает значение, отличное от null) в виде контейнера для действия.

Параметры

containerViewId — необязательный идентификатор контейнера, в который должен быть помещен этот фрагмент. Если 0, он не будет помещен в контейнер.

fragment — добавляемый фрагмент. Этот фрагмент еще не должен быть добавлен в действие.

tag — необязательное имя тега для фрагмента, чтобы позже извлечь фрагмент с помощью FragmentManager.findFragmentByTag(строка).

Возвращает — Возвращает тот же экземпляр FragmentTransaction.