(Nếu ai đó cần thêm thông tin, hoặc một mô tả tốt hơn cho tôi biết)ViewPager: Nếu trang bị loại bỏ các nội dung trang tiếp theo được trang bị loại bỏ nội dung
Xin chào tôi bao gồm các viewPagerLibrary từ đây: http://viewpagerindicator.com/#introduction hôm nay dự án của tôi.
Không, tôi gặp vấn đề thực sự lạ: Nếu tôi thêm trang hoặc trang (hãy gọi trang web đó trong vài dòng tiếp theo) và xóa lại mọi thứ đều ổn. Nhưng nếu tôi cố gắng để thêm một trang khác nhau (Những trang đó là các Fragements khác nhau mà thực hiện một lớp BaseFragment) nội dung của trang đầu tiên được hiển thị. Điều tương tự cũng xảy ra nếu tôi thêm một vài trang và xóa một trang giữa các trang đó. Trang sau trang bị xóa hiển thị nội dung trang đã xóa.
Ví dụ về lỗi này: Vấn đề hiện tại là. Nếu tôi thêm FragmentA sau đó FragmentB, sau đó tôi xóa FragmentA, FragmentB nhận được khung nhìn/nội dung của FragmentA. Điều kỳ lạ là, đối tượng là đúng (Vì vậy, bộ điều hợp trả lại đối tượng chính xác) và Tiêu đề cũng đúng.
Trong chính của tôi tạo Pager, Chỉ thị và Adaptor của tôi theo cách này:
Cfg.mAdapter = new FragmentAdapter(getSupportFragmentManager());
Cfg.mPager = (ViewPager)findViewById(R.id.pager);
Cfg.mPager.setAdapter(Cfg.mAdapter);
Cfg.mIndicator = (TabPageIndicator)findViewById(R.id.indicator);
Cfg.mIndicator.setViewPager(Cfg.mPager);
//We set this on the indicator, NOT the pager
Cfg.mIndicator.setOnPageChangeListener(TabHelper.onPageChangeListener);
(Các CFG là một tập tin tĩnh để lưu trữ những thứ đó cho việc sử dụng)
BaseFragment của tôi trông giống như sau :
public class BaseFragment extends Fragment{
public static int FILE_FRAGMENT = 0;
public static int FTP_FRAGMENT = 1;
public static int ADDFTP_FRAGMENT = 2;
public static int PREVIEW_FRAGMENT = 3;
public static int CSS_FRAGMENT = 4;
public static int BOOKS_FRAGMENT = 5;
public static int SNIPPETS_FRAGMENT = 6;
//private int id;
private int typ;
private String title;
public int getTyp() {
return typ;
}
public void setTyp(int typ) {
this.typ = typ;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
Một trong những mảnh vỡ trông như thế này (tôi nghĩ rằng các mảnh vỡ khác làm cho không có sự khác biệt):
public class FtpFragment extends BaseFragment {
private static RowLayout rowLayout_view;
public FtpFragment() {
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
init_data();
}
public static void init_data()
{
//Remove child for update
rowLayout_view.removeAllViews();
List<FtpData> ftps = FtpStorage.getInstance().getFtps();
if (ftps != null) {
for (FtpData f : ftps) {
View inflatedView;
inflatedView = View.inflate(Cfg.ctx, R.layout.ftp, null);
inflatedView.setOnClickListener(button_ftp_listener);
inflatedView.setOnLongClickListener(button_ftp_longClickListener);
inflatedView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, Converter.convertFromDPtoPixel(160.0f)));
inflatedView.setTag(f);
inflatedView.findViewById(R.id.book_imageview).setBackgroundDrawable(
Cfg.ctx.getResources().getDrawable(R.drawable.nopreview));
((TextView) inflatedView.findViewById(R.id.book_textview)).setText(f.nickname);
rowLayout_view.addView(inflatedView);
}
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_ftp, container, false);
rowLayout_view = (RowLayout) v.findViewById(R.id.rowLayout_ftps);
return v;
}
@Override
public String getTitle() {
return "FTPs";
}
@Override
public int getTyp() {
return BaseFragment.FTP_FRAGMENT;
}
@Override
public void setTyp(int typ) {
super.setTyp(typ);
}
}
Để xóa hoặc thêm một trang tôi gọi đây là:
public static void addNewTab(BaseFragment fragment)
{
Cfg.mAdapter.addItem(fragment);
Cfg.mPager.setCurrentItem(Cfg.mAdapter.getCount());
Cfg.mIndicator.notifyDataSetChanged();
}
public static void deleteActTab()
{
Cfg.mAdapter.removeItem(Cfg.mAdapter.getActPage());
Cfg.mIndicator.notifyDataSetChanged();
}
Và đó là adapter:
public class FragmentAdapter extends FragmentPagerAdapter implements TitleProvider{
public List<BaseFragment> fragments = new LinkedList<BaseFragment>();
private int actPage;
public FragmentAdapter(FragmentManager fm) {
super(fm);
}
public void setActPage(int actPage) {
Lg.d("setActPage: " + actPage + " : " + fragments.get(actPage).toString());
this.actPage = actPage;
}
public void addItem(BaseFragment fragment)
{
Lg.d("addItem: " + fragment.toString());
fragments.add(fragment);
}
public void removeItem(int index)
{
if(index < getCount()){
Lg.d("RemoveItem: " + index + " : " + fragments.get(index).toString());
fragments.remove(index);
}
}
public BaseFragment getActFragment()
{
return getItem(getActPage());
}
public int getActPage() {
return actPage;
}
@Override
public BaseFragment getItem(int position) {
if(position < getCount())
{
Lg.v("getItem: " + fragments.get(position));
return fragments.get(position);
}
else
return null;
}
@Override
public int getCount() {
return fragments.size();
}
@Override
public String getTitle(int position) {
Lg.v("Get Title: " + fragments.get(position).getTitle());
return fragments.get(position).getTitle();
}
}
Vâng tôi hy vọng ai đó có thể giúp tôi.
Nếu tôi quên điều gì đó, hãy để tôi konw.
Cảm ơn trước, Mike
bất kỳ đề xuất nào về vấn đề được đề cập ở đây http://stackoverflow.com/q/25159181/2624806 – CoDe