2009-11-12 60 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"); 

     } 
相关问题