我编写了一个自己的Adapter,并通过ListView将它添加到我的ListActivity中。 我编写自己的适配器的原因是,我必须对list-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:
在我添加的活动的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。 有没有办法得到这个文本?
答案 0 :(得分:18)
view
是列表项,因此您可以
String s =(String) ((TextView) view.findViewById(R.id.myNr)).getText();
答案 1 :(得分: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);
答案 2 :(得分:6)
Hey Guys我找到了另一种设置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;
}});
答案 3 :(得分: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;
}
});
答案 4 :(得分: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");
}
答案 5 :(得分:2)
如果你在这个人长按的项目位置寻找TextView,你可以用这样的东西把它拿出来:
String s = ((TextView) view.getItemAtPosition(info.position)).getText();
答案 6 :(得分:0)
是的,我也这么认为。但是当我实现这个时,我只需要获取List中第一个TextView的Text。这意味着我能够获得所需TextView的文本,但它始终是第一个列表条目的文本。是不是可以选择添加longClickedList-entry?
答案 7 :(得分:0)
感谢您的帮助,但我担心它仍然无效。 如果我添加你建议的行,它会强调“getItemAtPosition”并说: - 方法getItemAtPosition(int)未定义类型View -
他建议将视图转换为AdapterView,因此它看起来如下:
String s = ((TextView) ((AdapterView<ListAdapter>) view).getItemAtPosition(info.position)).getText();
当我运行此项并长按项目时,我收到“ClassCastException”
答案 8 :(得分:0)
在此方法中,您将获得与列表项相关的项目。
@Override
public boolean onContextItemSelected(MenuItem aItem) {
AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo) aItem.getMenuInfo();
Object entity = (Object) todoList.getAdapter().getItem(menuInfo.position);
switch (aItem.getItemId()) {}
}
答案 9 :(得分: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();
}
});
答案 10 :(得分:0)
我有一个ArrayList的ArrayList作为CustomAdapter的数据源,所以我用
menu.setHeaderTitle(Messages.get(info.position).getUserName());
答案 11 :(得分: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"));
}
});