दिलचस्प पोस्ट
कैसे पूरी तरह से Xcode 4 को दूर करने के लिए मेवेन-प्रबंधित निर्भरता के लिए एक्लिप्स से जुड़ी स्रोत जार फाइलें प्राप्त करें अजगर विधि की गणना एक अन्य विधि के भीतर की जाती है कक्षापाथ लिनक्स के तहत काम नहीं करता है PHP में हेडॉक का उपयोग करने का क्या फायदा है? नेस्टेड संग्रह इकाई फ़्रेमवर्क ऑब्जेक्ट फ़िल्टर कैसे करें? इन्वेलीज आईडीईए द्वारा मेवेन होम (एम 2_होम) को नहीं लिया जा रहा है स्प्राइट किट आईओएस 7.1 दुर्घटना में दूरफ्रेंपर त्रिज्या के भीतर अंकों के लिए बड़ी तालिकाओं को देखने का सबसे तेज़ तरीका क्या है MySQL (अक्षांश देशांतर) एकीकृत सुरक्षा के बीच अंतर = सही और एकीकृत सुरक्षा = एसएसपीआई क्या एक जावा सरणी को हैशमैप कुंजी के रूप में इस्तेमाल किया जा सकता है Google मानचित्र एपीआई v2 वर्ग नहीं मिला क्रॉस-डोमेन पोस्ट के साथ क्रेडेंशियल भेज रहा है? सीएसएस में "कैस्केडिंग" का क्या अर्थ है? अगर (cin >> x) – आप उस स्थिति का उपयोग क्यों कर सकते हैं?

ViewPager में एक टुकड़े को दूसरे के साथ बदलें

मुझे कुछ समस्याएं आ रही हैं जब मैं किसी एक दूसरे को एक ViewPager में बदलना चाहता हूं।

वर्तमान स्थिति

मेरे पास 3 पेज के साथ एक ViewPager , प्रत्येक एक Fragment । पहले पेज में, मेरे पास एक ListView (ListFragment) ("फैक्टुरास फ्रैग्मेंट") के अंदर है जब मैं उस सूची के किसी आइटम पर क्लिक करता हूं, तो मैं उस ईवेंट को संभालने के लिए onListItemClick विधि का उपयोग करता onListItemClick

मैं क्या चाहता हूँ

  • जब सूची आइटम पर क्लिक किया जाता है, तो मैं एक अन्य Fragment (" ListFragment " में चालान की सूची समाहित करता है) में ListFragment को बदलना चाहते हैं (इनवॉइस का विवरण)।
  • जब मैं " ListFragment " में हूं और वापस Button दबाएं, तो ListFragment वापस जाना चाहिए।
  • पृष्ठों के बीच स्क्रॉल करने से पहले एक में प्रदर्शित Fragment नहीं बदलना चाहिए। यह है, अगर मैं "पेज पर फर्स्ट पेज में हूं" और दूसरे पेज पर स्क्रॉल करें, जब पहली बार पर वापसी "डिटेल्स फेटुरा फ्रैग्मेंट" प्रदर्शित करना जारी रखना चाहिए।

कोड

FragmentActivity

 public class TabsFacturasActivity extends SherlockFragmentActivity { private MyAdapter mAdapter; private ViewPager mPager; private PageIndicator mIndicator; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.fragment_pager); mAdapter = new MyAdapter(getSupportFragmentManager()); mPager = (ViewPager)findViewById(R.id.pager); mPager.setAdapter(mAdapter); mIndicator = (TitlePageIndicator)findViewById(R.id.indicator); mIndicator.setViewPager(mPager); } private static class MyAdapter extends FragmentPagerAdapter { private String[] titles = { "VER FACTURAS", "VER CONSUMO", "INTRODUCIR LECTURA" }; private final FragmentManager mFragmentManager; private Fragment mFragmentAtPos0; private Context context; public MyAdapter(FragmentManager fragmentManager) { super(fragmentManager); mFragmentManager = fragmentManager; } @Override public CharSequence getPageTitle(int position) { return titles[position]; } @Override public Fragment getItem(int position) { switch (position) { case 0: // Fragment # 0 return new FacturasFragment(); case 1: // Fragment # 1 return new ConsumoFragment(); case 2:// Fragment # 2 return new LecturaFragment(); } return null; } @Override public int getCount() { return titles.length; } @Override public int getItemPosition(Object object) { if (object instanceof FacturasFragment && mFragmentAtPos0 instanceof DetallesFacturaFragment) return POSITION_NONE; return POSITION_UNCHANGED; } } } 

ListFragment

 public class FacturasFragment extends ListFragment { private ListView lista; private ArrayList<TuplaFacturaWS> facturas; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRetainInstance(true); } public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.activity_facturas, container, false); facturas = myApplication.getFacturas(); lista = (ListView) view.findViewById(id.list); MyAdapter myAdaptador = new MyAdapter(this, facturas); setListAdapter(myAdaptador); return view; } public void onListItemClick (ListView l, View v, int position, long id) { myApplication.setFacturaActual(position); mostrarDatosFactura(); } private void mostrarDatosFactura() { final DetallesFacturaFragment fragment = new DetallesFacturaFragment(); FragmentTransaction transaction = null; transaction = getFragmentManager().beginTransaction(); transaction.replace(R.id.pager, fragment); //id of ViewPager transaction.addToBackStack(null); transaction.commit(); } private class MyAdapter extends BaseAdapter { private final FacturasFragment actividad; private final ArrayList<TuplaFacturaWS> facturas; public MyAdapter(FacturasFragment facturasActivity, ArrayList<TuplaFacturaWS> facturas) { super(); this.actividad = facturasActivity; this.facturas = facturas; } @Override public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = actividad.getLayoutInflater(null); View view = inflater.inflate(R.layout.list_row, null, true); //Set data to view return view; } @Override public int getCount() { return facturas.size(); } @Override public Object getItem(int pos) { return facturas.get(pos); } @Override public long getItemId(int position) { return position; } private OnClickListener checkListener = new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub } }; } } 

टुकड़ा

 public class DetallesFacturaFragment extends SherlockFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRetainInstance(true); } public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.activity_factura, container, false); //Set data to view return view; } } 

फिलहाल, जब मैं सूची आइटम पर क्लिक करता हूं, तो पहले पृष्ठ पर सफेद दृश्य दिखाई देता है। मैंने सत्यापित किया है और "डेटेलसफैक्टाउराफ्रैग्मेंट" की onCreateView विधि को निष्पादित किया गया है, लेकिन उस पृष्ठ पर कुछ भी नहीं दिखाई देता है।

और पहली बार मैं सूची आइटम पर क्लिक करता हूं, यह दिखाता है कि सफेद स्क्रीन लेकिन सूची में वापस आने के बाद, मुझे सफेद स्क्रीन दिखाने के लिए सूची आइटम में दो बार क्लिक करना होगा

मैं googling गया है और कुछ कई सवाल देख रहे हैं, लेकिन पूरा कोड के साथ किसी को हल नहीं मिल सकता है

वेब के समाधान से एकत्रित समाधान "ViewPager में एक टुकड़े को दूसरे के साथ बदलें"

कितने घंटे बिताए, मैंने उस उत्तर में सही समाधान कोड संशोधित किया है

यह एक दूसरे के साथ ViewPager पहले पृष्ठ में Fragment जगह लेता है, और यदि आप दूसरे Fragment से वापस आते हैं, तो पहले Fragment सही ढंग से प्रदर्शित होता है। यदि आप एक पृष्ठ से दूसरे पृष्ठ पर स्वाइप करते हैं, तो पहले पृष्ठ में प्रदर्शित किए गए किसी Fragment कोई फर्क नहीं पड़ता, यह इसके Fragment परिवर्तित नहीं करता है।

यहां मेरा कोड है:

FragmentActivity

 public class TabsFacturasActivity extends SherlockFragmentActivity { public void onBackPressed() { if(mPager.getCurrentItem() == 0) { if (mAdapter.getItem(0) instanceof DetallesFacturaFragment) { ((DetallesFacturaFragment) mAdapter.getItem(0)).backPressed(); } else if (mAdapter.getItem(0) instanceof FacturasFragment) { finish(); } } } private static class MyAdapter extends FragmentPagerAdapter { private final class FirstPageListener implements FirstPageFragmentListener { public void onSwitchToNextFragment() { mFragmentManager.beginTransaction().remove(mFragmentAtPos0) .commit(); if (mFragmentAtPos0 instanceof FacturasFragment){ mFragmentAtPos0 = new DetallesFacturaFragment(listener); }else{ // Instance of NextFragment mFragmentAtPos0 = new FacturasFragment(listener); } notifyDataSetChanged(); } } private String[] titles = { "VER FACTURAS", "VER CONSUMO", "INTRODUCIR LECTURA" }; private final FragmentManager mFragmentManager; public Fragment mFragmentAtPos0; private Context context; FirstPageListener listener = new FirstPageListener(); public MyAdapter(FragmentManager fragmentManager) { super(fragmentManager); mFragmentManager = fragmentManager; } @Override public CharSequence getPageTitle(int position) { return titles[position]; } @Override public Fragment getItem(int position) { switch (position) { case 0: // Fragment # 0 if (mFragmentAtPos0 == null) { mFragmentAtPos0 = new FacturasFragment(listener); } return mFragmentAtPos0; case 1: // Fragment # 1 return new ConsumoFragment(); case 2:// Fragment # 2 return new LecturaFragment(); } return null; } @Override public int getCount() { return titles.length; } @Override public int getItemPosition(Object object) { if (object instanceof FacturasFragment && mFragmentAtPos0 instanceof DetallesFacturaFragment) { return POSITION_NONE; } if (object instanceof DetallesFacturaFragment && mFragmentAtPos0 instanceof FacturasFragment) { return POSITION_NONE; } return POSITION_UNCHANGED; } } } 

FirstPageFragmentListener

 public interface FirstPageFragmentListener { void onSwitchToNextFragment(); } 

फैक्टूरासफ्रेग्मेंट (फर्स्टफ्रैग्मेंट)

 public class FacturasFragment extends ListFragment implements FirstPageFragmentListener { static FirstPageFragmentListener firstPageListener; public FacturasFragment() { } public FacturasFragment(FirstPageFragmentListener listener) { firstPageListener = listener; } public void onListItemClick (ListView l, View v, int position, long id) { firstPageListener.onSwitchToNextFragment(); } } 

डिटेलेसफैक्टाउराफ्रैग्मेंट (सेकंडफ़्रेग्मेंट)

 public class DetallesFacturaFragment extends SherlockFragment { static FirstPageFragmentListener firstPageListener; public DetallesFacturaFragment() { } public DetallesFacturaFragment(FirstPageFragmentListener listener) { firstPageListener = listener; } public void backPressed() { firstPageListener.onSwitchToNextFragment(); } } 

मामूली मुद्दे को हल करने के लिए कि एंड्रॉइड खंड के लिए गैर-डिफॉल्ट कन्स्ट्रक्टर का उपयोग न करें। आपको इस तरह से कुछ करने के लिए कन्स्ट्रक्टर को बदलना चाहिए:

फैक्टुरास फ्रेग्मेंट में:

  public static FacturasFragment createInstance(FirstPageFragmentListener listener) { FacturasFragment facturasFragment = new FacturasFragment(); facturasFragment.firstPageListener = listener; return facturasFragment; } 

तब आप इसे getItem फ़ंक्शन से इसे इस तरह से कॉल कर सकते हैं:

  mFragmentAtPos0 = FacturasFragment.createInstance(listener); 

डिटेलेस में फेट्राफ्रैगमेंट:

  public static DetallesFacturaFragment createInstance(FirstPageFragmentListener listener) { DetallesFacturaFragment detallesFacturaFragment= new DetallesFacturaFragment(); detallesFacturaFragment.firstPageListener = listener; return detallesFacturaFragment; } 

उसके बाद आप इसे फर्स्टपेज लिस्टनर से कॉल कर सकते हैं। ऑन स्विचइंडफ़्रेग्मेंट () फ़ंक्शन इस तरह से:

  mFragmentAtPos0 = DetallesFacturaFragment.createInstance(listener);