Поместить SwipeView внутри фрагмента? - PullRequest
0 голосов
/ 19 марта 2020

Проблема: Наличие SwipeView внутри фрагмента (поэтому, когда фрагмент активен, вы можете переключаться между некоторыми другими фрагментами)

Что я пробовал: Я пытался реализуя его так же, как обычно, но во фрагменте:

НОРМАЛЬНЫЙ ПУТЬ:

public class MainActivity extends FragmentActivity {



ViewPager viewPager;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    viewPager = (ViewPager) findViewById(R.id.viewPager);
    SwipeAdapter swipeAdapter = new SwipeAdapter(getSupportFragmentManager());
    viewPager.setAdapter(swipeAdapter);


}

}

THE СПОСОБ Я ПОПРОБОВАЛ С ФРАГМЕНТОМ:

public class SecondFragment extends Fragment {


ViewPager viewPager;

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

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    viewPager = view.findViewById(R.id.VIEWPAGER);
    SwipeAdapter swipeAdapter = new SwipeAdapter(getChildFragmentManager());
    viewPager.setAdapter(swipeAdapter);
}

}

ОШИБКА: Возвращает «нулевую ссылку на объект», когда я пытаюсь установить адаптер (полагаю, у него проблемы с FragmentManager)

АДАПТЕР ДЛЯ ОБОИХ ПРИМЕРОВ:

public class SwipeAdapter extends FragmentStatePagerAdapter {

public SwipeAdapter(FragmentManager fm) {
    super(fm);
}

@Override
public Fragment getItem(int position) {
    Fragment fragment = new PageFragment();
    Bundle bundle = new Bundle();
    bundle.putInt("count", position+1);
    fragment.setArguments(bundle);
    return fragment;
}

@Override
public int getCount() {
    return 5;
}

}

В основной активности Я настроил так, чтобы вы могли переключать фрагменты с помощью кнопок, и то, что я пытаюсь реализовать во втором фрагменте, - это возможность пролистывать фрагменты с помощью SwipeView

ОСНОВНАЯ ДЕЯТЕЛЬНОСТЬ КОД:

public class MainActivity extends AppCompatActivity {

Button firstFragment, secondFragment;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    firstFragment = (Button) findViewById(R.id.firstFragment);
    secondFragment = findViewById(R.id.secondFragment);

    firstFragment.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            loadFragment(new FirstFragment());
        }
    });

    secondFragment.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            loadFragment(new SecondFragment());
        }
    });
}

private void loadFragment(Fragment fragment) {
    FragmentManager fm = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fm.beginTransaction();
    fragmentTransaction.replace(R.id.frameLayout, fragment);
    fragmentTransaction.commit();
}

}

Я не знаю, правильно ли это делать, но есть ли у кого-нибудь способ мак Любая помощь будет полезна, спасибо!

1 Ответ

0 голосов
/ 19 марта 2020

Вы не можете установить адаптер, потому что ваш вид еще не был создан.

 override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
     savedInstanceState: Bundle?
 ): View? = inflater.inflate(R.layout.fragment_first, container, false)


 override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
     super.onViewCreated(view, savedInstanceState)
     viewPager = view.findViewById(R.id.viewPager) as ViewPager
     swipeAdapter = SwipeAdapter(childFragmentManager) 
     ...
 }
...