का उपयोग करता है, इसलिए मैं कुछ दिनों से इसके साथ खेल रहा हूं और इसे काम करने के लिए प्रतीत नहीं होता है। मुझे एक ऐसी गतिविधि मिली है जो एक टुकड़ा प्रदर्शित करता है और वह टुकड़ा Fragments की एक सूची का सदस्य है जिसे मैं ViewPager का उपयोग करके पेज करता हूं। फ्रैगमेंट में टेक्स्टव्यू और लिस्ट व्यू शामिल है। ListView खुद को कस्टम एडाप्टर से पॉप्युलेट करता है।OnItemSlectedListener एक फ्रैगमेंट में जो कस्टम एडाप्टर
जो मैं करने की कोशिश कर रहा हूं वह एक ऑनइटेम चयन घटना को वापस फ्रैगमेंट में पास कर देता है जहां इसे संभाला जाता है। मेरे लिए शायद आगे बढ़ना और यहां कोड दिखाना बेहतर है।
public class FragmentOne extends Fragment implements OnItemSelectedListener {
View view;
ListView listMain;
ArrayList<String> invItems = new ArrayList<String>();
public FragmentOne() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup viewGroup, Bundle bundle) {
view = inflater.inflate(R.layout.fragment_one, viewGroup, false);
listMain = (ListView) v.findViewById(R.id.listMain);
listMain.setAdapter(new AdapterItem(getActivity().getApplicationContext(),
R.layout.tile_item, invItems));
listMain.setOnItemSelectedListener(this);
return view;
}
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
Log.i("Test", "hit");
}
कुछ पंक्तियों में संक्षिप्तता के लिए छोड़े गए हैं:
यह इस टुकड़ा है गतिविधि
public class DialogInventory extends FragmentActivity implements OnItemSelectedListener {
ViewPager viewPager;
Pager pager;
@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
setContentView(R.layout.dialog_inventory);
List<Fragment> fragList = new Vector<Fragment>();
fragList.add(Fragment.instantiate(this, FragmentOne.class.getName()));
fragList.add(Fragment.instantiate(this, FragmentTwo.class.getName()));
pager = new Pager(getSupportFragmentManager(), fragList);
viewPager = (ViewPager) findViewById(R.id.pagerMain);
viewPager.setAdapter(pager);
listMain = (ListView) findViewById(R.id.listMain);
listMain.setOnItemSelectedListener(this);
}
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
switch (viewPager.getCurrentItem()) {
case 0:
FragmentOne fragOne = new FragmentOne();
fragOne.onItemSelected(parent, view, pos, id);
break;
case 1:
FragmentTwo fragTwo = new FragmentTwo();
fragTwo.onItemSelected(parent, view, pos, id);
break;
}
}
public void onNothingSelected(AdapterView<?> arg0) {
}
है। आइए इस धारणा पर जाएं कि टुकड़े सही तरीके से प्रदर्शित होते हैं और यह सब कुछ काम करता है। एकमात्र चीज जो सही तरीके से काम नहीं कर रही है वह यह है कि गतिविधि में OnItem चयनित घटना बिल्कुल फायरिंग नहीं कर रही है ... टुकड़े में OnItem चयनित घटना बहुत कम है। मुझसे यहां क्या गलत हो रहा है?
संपादित करें: सूची दृश्य उनके संबंधित टुकड़ों में होना चाहिए (क्योंकि वे अलग-अलग गतिविधि में व्यक्तिगत रूप से प्रदर्शित होंगे और साथ ही ऊपर सूचीबद्ध एक भी)। यहां सबसे बड़ा मुद्दा यह है कि मैं अपनी गतिविधि में एक ऑनइटेम सेलेक्टेड लिस्टनर सेट नहीं कर सकता, इसलिए घटना को कभी भी निकाल दिया नहीं जाता है। मेरे पास उस बिंदु तक पहुंचने वाले सभी कोड हैं जो काम करते हैं और चलते हैं, यह केवल ऑनइटम चयनकर्ता है जो काम नहीं करता है।
संपादित 2: मैं कल इस प्रश्न पर एक बक्षीस जोड़ूंगा। इसके प्रकाश में मैंने सोचा कि मैं सही उत्तर के दायरे पर अधिक अंतर्निहित होगा। एक सही उत्तर यूआई लेआउट या प्रस्तुति में नाटकीय परिवर्तन का सुझाव नहीं देगा। सही उत्तर एक ऑनइटेम चयन घटना को टुकड़े टुकड़े में पारित करेगा और वहां संभाला जाएगा। उत्तर में मुझे कुछ गतिविधि प्राप्त करने के लिए कोड की रेखा के बाद लाइन के साथ अपनी गतिविधि को लोड नहीं करना पड़ेगा जो मुझे लगता है कि केवल कुछ पंक्तियों के साथ सक्षम है। अधिक सुरुचिपूर्ण उत्तर स्पष्ट रूप से अधिक आकर्षक हैं। इस पर नज़र रखने वाले किसी भी व्यक्ति के लिए धन्यवाद।
समस्या यह है कि मुझे अपनी गतिविधि में एनपीई मिलता है। मैं इसे एक सूची दृश्य में कैसे इंगित करता हूं जो कक्षा के लेआउट की तुलना में एक अलग लेआउट में मौजूद है।
अपने "मैं यूआई परिवर्तन करना चाहते हैं न" नियम को तोड़ने का खतरा चल रहा है, वहाँ एक कारण है कि आप एक 'ListFragment' उपयोग नहीं कर रहे जो डिफ़ॉल्ट रूप से आप एक पद्धति के लिए' देता है ओवरराइड करें जो 'ListView' पर क्लिक प्राप्त करता है और इस प्रकार आप ऐसा कर सकते हैं जो मैं मानता हूं कि आप ऐसा करने का प्रयास कर रहे हैं, जो सूची आइटम को स्थानीय रूप से खंड में क्लिक करने के लिए है ... http://developer.android.com /reference/android/app/ListFragment.html#onListItemClick(android.widget.ListView, android.view.View, int, long) –
हां, क्योंकि ListFragment पूरी स्क्रीन भरता है। इस मामले में मेरे पास नीचे दिए गए बटन होंगे, और शीर्ष – user1449018
पर टेक्स्टव्यू शीर्षक होगा, आपको लगता है कि चीजें सामने आती हैं: आपको गतिविधि में सूची आइटम क्लिक को पकड़ने की कोशिश नहीं करनी चाहिए और उन्हें टुकड़े में प्रचारित नहीं करना चाहिए (एस), बल्कि उन्हें प्रासंगिक खंड में सीधे प्राप्त करें। मूल रूप से @ सलीलपंडित ने सही दृष्टिकोण दिया है। चाहे आप 'ListFragment' का उपयोग करें या नहीं, लेकिन आपकी धारणा है कि यह "पूरी भर जाती है" स्क्रीन सही नहीं है; यह सूचियों से निपटने के लिए सिर्फ एक सुविधा खंड है, लेकिन आप इसे जो कुछ भी चाहते हैं उसे देख सकते हैं, बशर्ते आप कम से कम 'ListView' को '@android: id/list' के साथ घोषित करें। –