Почему мой ViewPager не отображает CrimeFragment? - PullRequest
0 голосов
/ 05 мая 2019

Я реализовал listfragment, ItemFragment, чей метод onItemClick вызывает намерение запустить CrimePagerActivity, в котором я инициализирую Viewpager view и подключаю к нему адаптер.

Моя цель - отобразить только один фрагмент в viewpager.

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

Есть ли проблема в моем Viewpager или fragment?

ItemFragment.java

public class ItemFragment extends ListFragment {

    CrimeData cd;

    public ItemFragment() { }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        cd = new CrimeData();
        cd.addCrime();
        MyListAdapter adapter = new MyListAdapter(this,0,cd.getCrimes());
        setListAdapter(adapter);
    }

    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        Intent i = new Intent(getActivity(), CrimePagerActivity.class);
        startActivity(i);
    }

}

CrimePagerActivity.java

public class CrimePagerActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_crime_pager);
        ViewPager pager = findViewById(R.id.viewpager);
        CrimeData cd = new CrimeData();
        ArrayList<CrimeData> list = cd.getCrimes();
        FragmentManager manager = getSupportFragmentManager();
        pager.setAdapter(new MyPagerAdapter(manager,list));
    }
}

MyPagerAdapter.java

public class MyPagerAdapter extends FragmentStatePagerAdapter {

    private ArrayList<CrimeData> list;

    public MyPagerAdapter(FragmentManager fm, ArrayList<CrimeData> list) {
        super(fm);
        this.list = list;
    }

    @Override
    public Fragment getItem(int i) {
        CrimeData cd = list.get(i);
        Bundle b = new Bundle();
        b.putString("crimename",cd.getCrimeName());
        b.putString("crimedate",cd.getCrimeDate().toString());
        b.putBoolean("crimestatus",cd.isCrimeStatus());
        return CrimeFragment.newInstance(b);
    }

    @Override
    public int getCount() {
        return list.size();
    }
}

CrimeFragment.java

public class CrimeFragment extends Fragment {

    private String crimename;
    private String crimedate;
    private boolean crimestatus;

    public CrimeFragment() { }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        try {
            Bundle b = getArguments();
            crimename = b.getString("crimename");
            crimedate = b.getString("crimedate");
            crimestatus = b.getBoolean("crimestatus");
        }catch (NullPointerException e){
            Log.d("myexception",e.getMessage());
        }
    }

    public static CrimeFragment newInstance(Bundle b){
        CrimeFragment crimeFragment = new CrimeFragment();
        crimeFragment.setArguments(b);

        return crimeFragment;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_crime, container, false);
        EditText editText = v.findViewById(R.id.edit);
        Button button = v.findViewById(R.id.datebut);
        CheckBox checkBox = v.findViewById(R.id.check);
        editText.setText(crimename);
        button.setText(crimedate);
        checkBox.setChecked(crimestatus);
        return v;
    }
}

1 Ответ

0 голосов
/ 05 мая 2019

getCount () в MyPagerAdapter должен возвращать no. страниц, которые вы хотите отобразить. Убедитесь, что возвращается 1, поскольку вы хотите отобразить 1 страницу.

Для полной справки, ViewPager + Fragments

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...