Giới thiệu về đơn đăng ký của tôi
Tôi đang phát triển một ứng dụng lịch. Bạn muốn hiển thị chế độ xem theo tháng với điều hướng vuốt ngang? Điều này có nghĩa là người dùng cuộn vô hạn có thể cuộn sang phải và trái theo tháng này sang bất kỳ ngày/tháng nào của năm bất kỳ. Tôi thấy ViewPager rất sử dụng đầy đủ để đạt được điều này (Tôi thực sự không biết bất kỳ phương pháp nào khác sử dụng đầy đủ) .Và bằng cách nhấn vào một người dùng ô ngày có thể xem chi tiết hoặc các sự kiện được thêm vào ngày đó (I don ' t muốn liên kết với lịch thiết bị).Cách thêm trang vào đầu ViewPager?
Về vấn đề
tôi có thể thêm trang mới vào cuối Xem pager của tôi mà không bất kỳ problem.But Nếu người dùng swipes sang trái tôi cần thêm một trang để đầu ViewPager tôi. . Khi tôi thêm trang vào đầu (vị trí chỉ mục bằng 0), trang này sẽ thay thế trang hiện tại của tôi ở vị trí 0 và chỉ có thể thêm một trang (Không có trang mới nào được thêm vào Tôi không biết tại sao). Và sau khi thêm trang vào vị trí zero Tôi không thể thêm thậm chí thêm trang đến cuối xem pager khi người dùng swipes sang phải và reachees trang quân cuối cùng gần xảy ra với một lỗi:
java.lang.IllegalStateException: Can't change tag of fragment MyFragment{40526bb8 #2 id=0x7f070000 android:switcher:2131165184:2}: was android:switcher:2131165184:2 now android:switcher:2131165184:3
Trong đơn giản câu
Tôi muốn biết cách nào đúng để thêm trang vào đầu và kết thúc của Trình xem trang?
Mã
Hoạt động và Adaptor
public class PageViewActivity extends FragmentActivity {
ViewPager pager;
MyPageAdapter pageAdapter;
ArrayList<Fragment> fragments;
int page_num = 0;
int current_page = 1;
int selected_page = 1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_page_view);
pager = (ViewPager) findViewById(R.id.viewpager);
fragments = getFragments();
pageAdapter = new MyPageAdapter(getSupportFragmentManager(), pager,
fragments);
pager.setAdapter(pageAdapter);
pager.setCurrentItem(2);
pager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
// setting the selected page index
selected_page = arg0;
//calling add page
addPage();
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
}
});
}
public int addPage() {
System.out.println("Add page called "+selected_page);
// checking if selected page is second last and if tru adds new page
if (selected_page >= (pageAdapter.getCount() - 1)) {
System.out.println("on first condition");
Fragment new_fragment = MyFragment.newInstance("Added to last "+ (pageAdapter.getCount() + 1));
//pageAdapter.fragments.add(pageAdapter.getCount(), new_fragment);
System.out.println("pageAdapter.getCount() : "+pageAdapter.getCount());
pageAdapter.add(pageAdapter.getCount(), new_fragment);
current_page = selected_page;
pageAdapter.notifyDataSetChanged();
System.out.println("New page added");
}else if((selected_page-1)<=0){
System.out.println("on second condition");
Fragment new_fragment = MyFragment.newInstance("Added to begning "+ (pageAdapter.getCount() + 1));
pageAdapter.add(0, new_fragment);
current_page = selected_page;
//pageAdapter.notifyDataSetChanged();
}
return pageAdapter.getCount();
}
private ArrayList<Fragment> getFragments() {
ArrayList<Fragment> fList = new ArrayList<Fragment>();
fList.add(MyFragment.newInstance("Fragment 1"));
fList.add(MyFragment.newInstance("Fragment 2"));
fList.add(MyFragment.newInstance("Fragment 3"));
fList.add(MyFragment.newInstance("Fragment 4"));
fList.add(MyFragment.newInstance("Fragment 5"));
return fList;
}
private class MyPageAdapter extends FragmentPagerAdapter {
private ArrayList<Fragment> fragments;
private ViewPager mPager;
public MyPageAdapter(FragmentManager fm, ViewPager vp,
ArrayList<Fragment> fragments) {
super(fm);
this.fragments = fragments;
this.mPager = vp;
}
public void add(int position,Fragment f){
fragments.add(position, f);
this.notifyDataSetChanged();
}
@Override
public Fragment getItem(int position) {
return this.fragments.get(position);
}
@Override
public int getCount() {
return this.fragments.size();
}
}
}
lớp Fragment My
public class MyFragment extends Fragment {
public static final String EXTRA_MESSAGE = "EXTRA_MESSAGE";
public static final MyFragment newInstance(String message)
{
MyFragment f = new MyFragment();
Bundle bdl = new Bundle(1);
bdl.putString(EXTRA_MESSAGE, message);
f.setArguments(bdl);
return f;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
String message = getArguments().getString(EXTRA_MESSAGE);
View v = inflater.inflate(R.layout.myfragment_layout, container, false);
TextView messageTextView = (TextView)v.findViewById(R.id.textView);
messageTextView.setText(message);
//return null;
return v;
}
}
Trả lời dưới đây là một cách tốt đẹp nhưng thats không thêm một trang vào đầu của máy nhắn tin xem, xin vui lòng giúp tôi để sắp xếp ra vấn đề này, hoan nghênh tất cả để chia sẻ ý tưởng của bạn .... –
bạn đã tìm thấy giải pháp nào? tôi có chung vấn đề đó. tnx để chia sẻ – mehdok