(किसी में अधिक जानकारी की जरूरत है, या एक बेहतर विवरण मुझे पता है तो)Viewpager: अगर पेज भी निकल जाते हैं अगले पृष्ठ सामग्री नष्ट कर पृष्ठों की सामग्री हो जाता है
हैलो मैं यहाँ से viewPagerLibrary शामिल: में http://viewpagerindicator.com/#introduction आज मेरी परियोजना।
नहीं मुझे वास्तव में एक अजीब समस्या मिलती है: यदि मैं कोई साइट या पेज जोड़ता हूं (चलिए इसे अगले कुछ पंक्तियों में साइट कहते हैं) और इसे फिर से हटा दें सब कुछ ठीक है। लेकिन अगर मैं एक अलग पृष्ठ जोड़ने की कोशिश करता हूं (वे पृष्ठ अलग-अलग फ्रेजमेंट हैं जो बेसफ्रैगमेंट क्लास लागू करते हैं) पहले पृष्ठ की सामग्री दिखायी जाती है। वही बात होती है यदि मैं कुछ पेज जोड़ता हूं और उन पृष्ठों के बीच एक को हटा देता हूं। हटाए गए पृष्ठ के बाद वाला पृष्ठ अब हटाए गए पृष्ठों की सामग्री दिखाता है।
इस बग का एक उदाहरण: समस्या अब है। अगर मैं उस FragmentB के बाद FragmentA जोड़ता हूं, तो मैं FragmentA को हटा देता हूं, FragmentB FragmentA का दृश्य/सामग्री प्राप्त करता है। अजीब चीज यह है कि ऑब्जेक्ट सही है (इसलिए एडाप्टर सही ऑब्जेक्ट देता है) और शीर्षक भी सही है।
अपने मुख्य में मैं अपने पेजर, संकेतक और एडाप्टर इस तरह से बनाने के लिए:
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);
मेरे BaseFragment ऐसा दिखाई देता है (CFG एक स्थिर उपयोग के लिए उन चीजों को स्टोर करने के लिए फ़ाइल है) :
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;
}
}
टुकड़े में से एक इस तरह दिखता है (मुझे लगता है कि अन्य टुकड़े कोई अंतर नहीं):
+०१२३५१६४१०६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);
}
}
हटाने या एक पेज मैं इस फोन को जोड़ने के लिए:
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();
}
और वह एडाप्टर है:
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();
}
}
हाँ मैं आशा कोई मेरी मदद कर सकते हैं।
अगर मैं कुछ भूल गया तो मुझे बताएं।
अग्रिम धन्यवाद, माइक
समस्या का कोई सुझाव यहां उल्लेख किया गया है http://stackoverflow.com/q/25159181/2624806 – CoDe