Я реализовал 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;
}
}