2009-11-12 7 views
7

मैंने अपना एडाप्टर कोड किया और इसे सूची सूची के माध्यम से अपनी सूची एक्टिविटी में जोड़ा। मैंने अपना एडाप्टर क्यों लिखा है, मुझे सूची-प्रविष्टियों में कुछ लेआउट परिवर्तन करना पड़ा। सूची के प्रत्येक प्रविष्टि में मुझे 3 टेक्स्ट व्यू मिल गए हैं।एंड्रॉइड, कस्टम लिस्ट एडाप्टर टेक्स्ट व्यू-टेक्स्ट

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="?android:attr/listPreferredItemHeight" 
android:padding="6dip"> 
<TextView 
    android:id="@+id/myNr" 
    android:layout_width="40dip" 
    android:layout_height="fill_parent" 
    android:layout_marginRight="15dip" 
    android:text="id" 
    android:textSize="25dip" 
    android:background="#333333" 
    android:gravity="center_horizontal"/> 
<LinearLayout 
    android:orientation="vertical" 
    android:layout_width="0dip" 
    android:layout_weight="1" 
    android:layout_height="fill_parent"> 
    <TextView 
     android:id="@+id/editor" 
     android:layout_width="fill_parent" 
     android:layout_height="0dip" 
     android:layout_weight="1" 
     android:gravity="center_vertical" 
     android:text="Editor: " /> 
    <TextView 
     android:id="@+id/date" 
     android:layout_width="fill_parent" 
     android:layout_height="0dip" 
     android:layout_weight="1" 
     android:singleLine="true" 
     android:ellipsize="marquee" 
     android:text="Date: " /> 
</LinearLayout> 

अगली बात मैंने किया, एक "onListItemClick-Methode" लागू करने के लिए किया गया था। बाद में मैं एक onListItemLongClick कार्यान्वित - निम्न कोड के साथ श्रोता: गतिविधि मैं जोड़ा की onCreate में

:

registerForContextMenu(getListView()); 

तो मैं निम्नलिखित methode कहा:

Override 
public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo){ 
     AdapterView.AdapterContextMenuInfo info; 
     info = (AdapterView.AdapterContextMenuInfo) menuInfo; 
      long id = getListAdapter().getItemId(info.position); 
     } 

जहां "आईडी" है सूची में आइटम की अनुक्रमणिका। मैं अब आईडी = "इस ListItem की myNr साथ texview का पाठ करना चाहते हैं। वहाँ किसी भी तरह से इस पाठ मिलता है?

उत्तर

6

अरे दोस्तों मैं एक ItemLongClickListener स्थापित करने के लिए एक और रास्ता मिल गया। इसलिए मुझे जिस पाठ को मैं प्रदर्शित कर रहा हूं उसे प्राप्त करने का एक तरीका भी मिला।

ListView lv = getListView(); 
lv.setOnItemLongClickListener(new OnItemLongClickListener(){ 
@Override 
public boolean onItemLongClick(AdapterView<?> arg0, View arg1,int row, long arg3) { 
    String[] tmp = (String[]) arg0.getItemAtPosition(row); 
    //tmp[0] ist the Text of the first TextView displayed by the clicked ListItem 
    return true; 
    }}); 
18

view, सूची आइटम है, तो आप कर सकते हैं

String s =(String) ((TextView) view.findViewById(R.id.myNr)).getText(); 
+0

इतना आसान और यह काम करता है। धन्यवाद। :) –

0

हां मैंने यह भी सोचा था। लेकिन जब मैं इसे कार्यान्वित करता हूं तो मुझे सूची में पहले टेक्स्ट व्यू का टेक्स्ट मिलता है। इसका मतलब है कि मैं वांछित टेक्स्ट व्यू का टेक्स्ट प्राप्त करने में सक्षम हूं लेकिन यह हमेशा पहली सूची-प्रविष्टि का पाठ है क्या longClickedList-entry को संबोधित करने का कोई विकल्प नहीं है?

2

यदि आप पॉसी पर टेक्स्ट व्यू की तलाश में हैं आइटम व्यक्ति लंबे समय से दबाया के मोर्चे, आप यह कुछ इस तरह का उपयोग कर बाहर निकल सकते हैं:

String s = ((TextView) view.getItemAtPosition(info.position)).getText(); 
0

आपकी मदद के लिए धन्यवाद, लेकिन मुझे डर लग रहा यह अभी भी काम नहीं करता है। अगर मैं लाइन आप सुझाव जोड़ने के लिए, यह "getItemAtPosition" को रेखांकित करता है और कहते हैं: --The विधि getItemAtPosition (int) प्रकार के लिए अपरिभाषित है View--

वह एक AdapterView को देखने कास्ट करने के लिए सुझाव देते हैं, तो यह लग रहा है निम्नलिखित:

String s = ((TextView) ((AdapterView<ListAdapter>) view).getItemAtPosition(info.position)).getText(); 

जब मैं इस चलाने के लिए और आइटम पर एक लंबे क्लिक करें, मैं प्राप्त एक "ClassCastException"

0

इस विधि में आपको अपनी सूची आइटम से संबंधित आइटम मिल जाएगा।

@Override 
public boolean onContextItemSelected(MenuItem aItem) { 
    AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo) aItem.getMenuInfo(); 
    Object entity = (Object) todoList.getAdapter().getItem(menuInfo.position); 
    switch (aItem.getItemId()) {} 
} 
9

केवल पाठ को देखने के के संदर्भ ले अगर आप की तरह

Listener = new OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, 
      long id) { 

TextView tx =(TextView)view.findViewById(R.id.text); 
      String s = tx.getText().toString(); 
      Log.d(TAG, "string : "+s); 
0
list.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view,int position, long id) { 
      String title = (String) ((TextView)view.findViewById(R.id.title)).getText(); 
       String artist=(String)((TextView)view.findViewById(R.id.artist)).getText(); 

        //System.out.println(s); 
         Toast.makeText(CustomizedListView.this,"Title = "+title+"\n"+"Artist = "+artist, Toast.LENGTH_SHORT).show();        

     } 
    });  
4

मैंने पाया ऊपर समाधान से कोई भी काम करने के लिए एक BaseAdapter विस्तार।एक विकल्प के रूप में आप कर सकते हैं:

getListView().setOnItemLongClickListener(new OnItemLongClickListener() 
{ 

    public boolean onItemLongClick(AdapterView<?> arg0, View v,int position, long id) 
    { 

    Cursor c = (Cursor) arg0.getItemAtPosition(position); 
    String tableValue = c.getString(1); 

     return true; 
    } 
}); 
0

मैं CustomAdapter के लिए मेरे डेटा स्रोत के रूप ArrayLists की एक ArrayList था, इसलिए मैं

menu.setHeaderTitle(Messages.get(info.position).getUserName()); 
0

का उपयोग का उपयोग कर HashMap

getListView().setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      HashMap m = (HashMap) getListView().getItemAtPosition(position); 
      System.out.println("itemClick: position = " + position + ", id = " + id + " o = " + m.get("YOUR_KEY")); 
     } 
    }); 
3
सबसे अच्छा

समाधान मैंने पाया:

@Override 
     public void onCreateContextMenu(ContextMenu menu, View view,ContextMenuInfo menuInfo) { 
     super.onCreateContextMenu(menu, view, menuInfo); 
     AdapterView.AdapterContextMenuInfo info =  (AdapterView.AdapterContextMenuInfo)menuInfo; 

     ViewGroup vg = (ViewGroup) view; 
     View children = vg.getChildAt(info.position); 
     TextView child = (TextView) children.findViewById(R.id.text1); 

     String s= child.getText().toString(); 
      menu.setHeaderTitle(s); 
      menu.add(0, view.getId(), 0, "Serve"); 
      menu.add(0, view.getId(), 0, "View"); 

     }