我有一个自定义ListView
项目如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:gravity="center_vertical"
android:paddingTop="2dp"
android:paddingBottom="2dp"
android:background="@android:color/transparent">
<ImageView
android:id="@+id/profile_picture"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/mr_unknown"
android:contentDescription="@string/profile_picture_description"
android:paddingRight="3dp"/>
<TextView
android:id="@+id/real_life_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/FriendListText"/>
<Button
android:id="@+id/ping_friend"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Ping Friend"
/>
</LinearLayout>
在此ListView中使用:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="@color/white"
tools:context=".FriendListActivity" >
<ListView
android:id="@+id/friend_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fastScrollEnabled="true"
android:smoothScrollbar="false"
style="@style/ListViewStyle" >
</ListView>
</LinearLayout>
现在我想要在任何列表项上点击 Ping Friend 按钮时,它应显示 AlertDialog 。我用过这段代码......
friendListAdapter = new FriendListAdapter(FriendListActivity.this, friends);
friendListView = (ListView) findViewById(R.id.friend_list);
friendListView.setAdapter(friendListAdapter);
downloadFriends_async(); //This method downloads all the *friends* into ListView from Database. *Its working correctly*.
friendListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);
alertDialogBuilder.setTitle("Hello!!!");
alertDialogBuilder
.setMessage("Do you want to exit?")
.setCancelable(false)
.setPositiveButton("Yes",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
FriendListActivity.this.finish();}})
.setNegativeButton("No",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
dialog.cancel();}});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
}
});
没有显示错误。
问题是它没有响应Click on Button而且根本没有出现AlertDialog。
对于按钮我也厌倦了在 ListView 的onItemClick
内添加:
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Button btnPingFriend = (Button) findViewById(R.id.ping_friend);
btnPingFriend.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
//Rest of AlertDialog Code...
}
仍然没有回应。
请建议。
答案 0 :(得分:19)
添加
android:descendantFocusability="blocksDescendants"
到您商品的顶部ViewGroup
<强> UPD 强>:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:gravity="center_vertical"
android:paddingTop="2dp"
android:paddingBottom="2dp"
android:background="@android:color/transparent"
android:descendantFocusability="blocksDescendants"
>
<ImageView
android:id="@+id/profile_picture"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/mr_unknown"
android:contentDescription="@string/profile_picture_description"
android:paddingRight="3dp"/>
<TextView
android:id="@+id/real_life_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/FriendListText"/>
<Button
android:id="@+id/ping_friend"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Ping Friend"
/>
</LinearLayout>
答案 1 :(得分:0)
尝试这样:
listview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
AlertDialog.Builder alertbox=new AlertDialog.Builder(FirstActivity.this);
alertbox.setTitle("Warning");
alertbox.setMessage("Exit Application?");
alertbox.setPositiveButton("Yes", new
DialogInterface.OnClickListener() {
public void onClick(DialogInterface arg0, int arg1) {
/////operations
}
});
alertbox.setNegativeButton("No", new
DialogInterface.OnClickListener() {
public void onClick(DialogInterface arg0, int arg1) {
}
});
alertbox.show();
}
答案 2 :(得分:0)
您似乎正试图让Button
回复用于onItemClick
的{{1}}。
修改强>
在ListView
(FriendsListAdapter)实施中的getView
方法中,你应该把它放在:
ListAdapter
Button btnPingFriend = (Button) v.findViewById(R.id.ping_friend);
btnPingFriend.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
// Add your dialog here.
}
位于Button
内,不会回复容器的ListView
- 请查看Listener
文档:http://developer.android.com/reference/android/widget/Button.html { {1}}你可以使用......