Android,自定义ListAdapter获取TextView文本

我编写了一个自己的适配器,并通过ListView添加到我的ListActivity。 为什么我写了一个自己的适配器是,我不得不做一些布局更改列表entrys。 在列表中的每一个条目我有3个TextViews。

<?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 – Listener:

在我添加的Activity的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”是列表中项目的索引。 我现在想要得到这个ListItem的id =“myNr的texview的Text。有没有办法得到这个Text?

Solutions Collecting From Web of "Android,自定义ListAdapter获取TextView文本"

view是列表项,所以你可以做

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

如果你像扩展一个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); 

嘿,伙计们,我发现另一种方法来设置ItemLongClickListener。 因此,我也find了一种方法来获取我正在显示的文本。

 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; }}); 

我没有发现上述解决scheme的工作。 作为替代,您可以:

 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; } }); 

我find的最佳解决scheme是:

 @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"); } 

如果你正在寻找TextView的位置的人长按,你可以使用这样的东西:

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

是的,我也这么认为。 但是当我实现这个我只是得到列表中的第一个TextView的文本。 这意味着我能够获得所需的TextView的文本,但它总是第一个列表项的文本。 没有选项来处理longClickedList-entry?

感谢您的帮助,但恐怕它仍然无法正常工作。 如果我添加你build议的行,它强调“getItemAtPosition”,并说: – 方法getItemAtPosition(int)是未定义的typesView–

他build议将视图转换为AdapterView,所以看起来如下所示:

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

当我运行这个,并长时间点击该项目,我收到一个“ClassCastException”

在这种方法中,您将获得与您的列表项目相关的项目。

 @Override public boolean onContextItemSelected(MenuItem aItem) { AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo) aItem.getMenuInfo(); Object entity = (Object) todoList.getAdapter().getItem(menuInfo.position); switch (aItem.getItemId()) {} } 
 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(); } }); 

我有一个ArrayList的ArrayList作为我的CustomAdapter的数据源,所以我使用

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

使用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")); } });