2009-11-12 59 views
7

我編碼的自己的適配器,通過一個ListView控件將它添加到我的ListActivity。 我寫了一個自己的適配器的原因是,我不得不做一些佈局更改列表entrys。在列表的每一個條目中,我都有3個TextViews。機器人,自定義ListAdapter得到的TextView文本

<?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()); 

然後添加以下梅索德:

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

其中 「id」 爲列表中項目的索引。 我現在想用這個列表項的id =「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

這麼簡單,它的工作。謝謝。 :) – 2012-06-07 00:20:43

0

是的,我也這麼認爲,但是當我實現這個時,我只是得到列表中第一個TextView的Text,這意味着我能夠獲得所需TextView的文本,但它始終是第一個列表條目的文本。是不是有ADRESS的longClickedList進入一個選項?

2

如果你在POSI尋找的TextView人長按該項目的重刑,你可以使用這樣的事情把它弄出來:

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

感謝您的幫助,但恐怕它仍然不起作用。 如果我加你建議的路線,它強調「getItemAtPosition」,並說: --The方法getItemAtPosition(INT)是未定義的類型View--

他建議到視圖轉換爲適配器視圖,因此它看下面:

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

只是採取的文本視圖的參考,如果你伸出的BaseAdapter

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

我沒有發現上述解決方案的工作。作爲替代您可以:

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

我的ArrayList作爲CustomAdapter我的數據源的一個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"); 

     } 
相關問題