#android #android-fragments #android-viewpager #android-tablayout
#Android #android-фрагменты #android-viewpager #android-tablayout
Вопрос:
В ViewPager
с TableLayout
у меня есть 5 фрагментов. Я нажимаю на фрагмент-3, setUserVisibleHint = true
. Button
при нажатии на фрагмент-3 замените или добавьте другой фрагмент. Не происходит никаких событий во фрагменте-3 при нажатии назад. Я хочу выполнить какое-то действие, когда пользователь нажимает назад.
public class ThreeFragment extends Fragment {
public ThreeFragment() {
// Required empty public constructor
}
/**
* Use this factory method to create a new instance of
* this fragment using the provided parameters.
*
* @return A new instance of fragment BlankFragment.
*/
// TODO: Rename and change types and number of parameters
public static ThreeFragment newInstance() {
ThreeFragment fragment = new ThreeFragment();
Bundle args = new Bundle();
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onResume() {
super.onResume();
Log.d("onResume", "onResume");
}
@Override
public void onPause() {
super.onPause();
Log.d("onPause", "onPause");
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
Log.d("onCreateView", "onCreateView");
View view = inflater.inflate(R.layout.fragment_three, container, false);
view.findViewById(R.id.txt).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager fragmentManager2 = getFragmentManager();
FragmentTransaction fragmentTransaction2 = fragmentManager2.beginTransaction();
BlankFragment fragment2 = BlankFragment.newInstance();
fragmentTransaction2.addToBackStack("abc");
fragmentTransaction2.add(android.R.id.content, fragment2);
fragmentTransaction2.commit();
}
});
return view;
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
Log.d("setUserVisibleHint", "setUserVisibleHint :: " isVisibleToUser);
}
}
Новый фрагмент :
public class BlankFragment extends Fragment {
public BlankFragment() {
// Required empty public constructor
}
// TODO: Rename and change types and number of parameters
public static BlankFragment newInstance() {
BlankFragment fragment = new BlankFragment();
Bundle args = new Bundle();
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_blank, container, false);
}
}
Комментарии:
1. вы имеете в виду, что у вас есть кнопка на фрагменте-3, и когда пользователь нажимает на это, но затем он переходит к другому фрагменту? затем вы хотите, чтобы, когда пользователь нажимает кнопку «Назад» в новом фрагменте, он возвращался к фрагменту-3?
2. Откройте новый фрагмент и выполните обратную навигацию. При возврате из нового фрагмента фрагмент-3 не получает никакого события жизненного цикла для идентификации того, что фрагмент-3 теперь виден
3. теперь я понимаю вас, пожалуйста, поделитесь фрагментом-3 и новым кодом фрагмента, чтобы мне было легко вам помочь
4. Я добавил код, братан.
Ответ №1:
вы можете легко справиться с этим в новом фрагменте
fragment.getView().setFocusableInTouchMode(true);
fragment.getView().requestFocus();
fragment.getView().setOnKeyListener( new OnKeyListener()
{
@Override
public boolean onKey( View v, int keyCode, KeyEvent event )
{
if( keyCode == KeyEvent.KEYCODE_BACK )
{
//do what you wnt to do when the user prees back
return true;
}
return false;
}
} );
перед возвратом true; делайте то, что вы хотите сделать, когда пользователь нажимает «Назад»
и вы можете использовать
getFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
чтобы скрыть последний фрагмент и показать предыдущий
Комментарии:
1. Братан. если бы там была только одна навигация, я мог бы с этим справиться. Но есть много переходов к разным фрагментам. Я опубликовал только для примера
2. что вы хотите сделать именно при нажатии кнопки «Назад»?
3. Список транзакций необходимо обновлять и другие обновления пользовательского интерфейса, каждый раз при повторном нажатии.
4. просто скопируйте метод OnKey для всего вашего фрагмента и обновите пользовательский интерфейс, как вам нравится, в каждом нажатом фрагменте