#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.