我正在尝试在setOnItemClickListener方法中检索我的ListItem布局中定义的TextView的getText()值。
基本上,我想记录数据(Id,LookupKey,DisplayName或PhoneNumber),无论使用哪个列表视图/适配器,我都可以检索所选的联系人。
我显示一个简单的TextView和一个Imageview,根据数据设置可见性。 这是布局:contact_entry.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content" android:baselineAligned="false"
android:layout_width="fill_parent" android:padding="5px">
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content" android:textSize="16px"
android:text="@+id/contactEntryText" android:id="@+id/contactEntryText">
</TextView>
<TableRow android:paddingLeft="5px" android:visibility="visible"
android:paddingRight="5px" android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/indicator_logo_table"
android:gravity="right">
<ImageView android:layout_width="wrap_content"
android:id="@+id/imageView1"
android:layout_height="fill_parent"
android:src="@drawable/indicator">
</ImageView>
</TableRow>
</LinearLayout>
我使用的适配器定义如下:
SimpleAdapterWithImageView adapter = new SimpleAdapterWithImageView(
this, R.layout.contact_entry, cursor, fields,
new int[] { R.id.contactEntryText });
mContactList.setAdapter(adapter);
(您可能已经猜到它是用于显示ContactsContract ContentProvider中联系人的Display_Name。)
,最后是mContactList.setOnItemClickListener ...
mContactList.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
LinearLayout linear = (LinearLayout) view.findViewById(R.layout.contact_entry);
Log.i("done","linear layout"); // it's not done at all ! findViewById returns null;
//this part is currently useless
TextView displayed_name = (TextView) linear.findViewById(R.id.contactEntryText);
Log.i("done","Displayed name = linear.findViewById contactentrytext");
Toast.makeText(getApplicationContext(),
// displayed_name.getText(), //
//view.getContentDescription(), //
Toast.LENGTH_SHORT).show();
}
正如你所看到的那样,我现在只是试图展示一个祝酒词,最后这个名字将作为一个额外的意图。
所以:我最后36小时(叹气)得到的最好结果是显示吐司中显示的第一个联系人的姓名,即使点击第二个项目......
TextView displayed_name = (TextView) findViewById(R.id.contactEntryText);
Toast.makeText(getApplicationContext(),displayed_name.getText(),
Toast.LENGTH_SHORT).show();
}
我一直在尝试谷歌提供的教程here,这些(我错了吗?我是Android的新手,所以不要犹豫,打我一脸......)实际上是整个视图在TextView ...
加上其他技巧,例如view.getChildAt()等......几个小时。
我确信这不是那么难,但我在圈子里跑! 我不认为这是因为我的适配器,但如果有人认为这可能是原因,我可以在另一篇文章中提供代码。
提前致谢!
答案 0 :(得分:1)
LinearLayout linear = (LinearLayout) view.findViewById(R.layout.contact_entry);
这是一个错误 - 你不能在R.layout
中使用findViewById
。通常,您需要在那里使用R.id
,或者通过夸大布局来替换findViewById
。但在这种情况下,您只需要参数view
。
用这个替换退出的代码:
LinearLayout linear = (LinearLayout) view;