2012-12-29 14 views
13

काम नहीं कर रहा है मैं टैबड लेआउट (स्वाइप के साथ) का उपयोग कर रहा हूं। यहां मेरे पास 3 टैब हैं जो SectionsPagerAdapter द्वारा नियंत्रित हैं। प्रत्येक टैब एक सूचीफ्रेगमेंट है।ListFragment onItemClickListener

अब सूची में से किसी एक आइटम पर क्लिक होने पर मैं एक ईवेंट निकालना चाहता हूं। मुझे प्रत्येक टैब के लिए श्रोता चाहिए।

यहां कोड है (जो काम नहीं कर रहा है, घटना को निकाल दिया नहीं गया है)।

public class NyhederFragment extends ListFragment { 
    public static final String ARG_SECTION_NUMBER = "section_number"; 
    private static final String TAG="NyhederFragment"; 
    private List<Item> newsItems; 
    private ArrayList newsHeadlines; 
    private ArrayAdapter adapter; 
    private BroadcastReceiver updateReciever; 

public NyhederFragment() { 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    ListView newsList = new ListView(getActivity()); 
    newsList.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); 
    newsList.setId(R.id.list); 
    DatabaseHelper dbConn = new DatabaseHelper(getActivity()); 

    newsItems = dbConn.getAllItemsFromNews(); 
    newsHeadlines = new ArrayList(); 
    for(Item i : newsItems){ 
     newsHeadlines.add(i.getTitle()); 
    } 

    adapter = new ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1, newsHeadlines); 

    setListAdapter(adapter); 

    newsList.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 
      Log.i("debug", "single click"); 
     } 
    }); 

    dbConn.close(); 

    getActivity().registerReceiver(updateReciever, new IntentFilter("ArticlesUpdated")); 
    return newsList; 
} 
} 

यह क्या है, मैं गलत कर रहा हूं?

बहुत पहले से धन्यवाद!

उत्तर

36

आप ListFragment का उपयोग कर रहे हैं तो आप बस अपने ओवरराइड विधि onListItemClick()

@Override 
    public void onListItemClick(ListView l, View v, int position, long id) { 
     // TODO Auto-generated method stub 
     super.onListItemClick(l, v, position, id); 
    } 
+1

हां। पता चला कि बाहर लेकिन मेरे अपने सवाल का जवाब नहीं दे सका। (नीचे पोस्ट पर टिप्पणी देखें)। लेकिन वैसे भी बहुत धन्यवाद! :) – Whooper

+1

हाँ! अंत में कुछ काम किया! मैंने पिछले आधा घंटे एक समाधान की तलाश में बिताया है, और यह था! धन्यवाद! – cw1998

+1

मुझे बचाया! मेरे मामले में – k2ibegin

0

परिवर्तन setListAdapter(adapter);newsList.setAdapter(adapter);

+0

हम्म .. अभी भी काम नहीं कर रहा है। लेकिन मैं शर्त लगाता हूं कि यह भी एक त्रुटि थी। धन्यवाद! – Whooper

+2

ने इसे स्वयं समझा :) :) समाधान पर लिस्टटाइम पर क्लिक करने के लिए समाधान था। हालांकि कम प्रतिष्ठा के कारण उत्तर नहीं दे सकता है। – Whooper

14

यह कस्टम सूची आइटम की वजह से है का उपयोग कर सकते है। डिफ़ॉल्ट फोकस कस्टम सूची आइटम (बटन/टेक्स्टव्यू) के साथ है। यह इस मुद्दे का कारण बनता है।

कृपया सूची तत्व के रूट लेआउट में android:descendantFocusability="blocksDescendants" जोड़ें। आशा है कि यह किसी की मदद करेगा।

+0

यह मेरे लिए काम करता था, धन्यवाद! –

+3

इच्छा है कि मैं इसे एक दर्जन बार उठा सकता हूं! –

0

आप या पुन: उपयोग या एक मौजूदा हैंडलर कि AdapterView.OnItemClickListener लागू करता है, बल्कि ListFragment भीतर onListItemClick() को लागू करने से, आप ListFragment की ListView के लिए एक संदर्भ हो रही है और अपने श्रोता की स्थापना करके ऐसा कर सकते हैं बनाना चाहता था तो। अपने ListFragment.onResume() तुम कर सकते हो:

@Override 
public void onResume() { 
    super.onResume(); 
    ListView listView = getListView(); 
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      Log.d("TAG", "Stop touching me"); 
     } 
    }); 
} 

मेरे मामले में, मैं एक ही श्रोता एक Activity से एक ListView के साथ, एक ListActivity या एक ListFragment, उदा उपयोग कर सकते हैं

listView.setOnItemClickListener(new MyListViewOnClickListener(getActivity()));

संबंधित मुद्दे