【发布时间】:2015-02-02 19:52:03
【问题描述】:
我在 android 中有一个 listview,它显示来自数据库的人员信息。
listview 被赋予 OnItemClickListener() 。在 OnItemClickListener() 内部,我还为列表视图项中的按钮添加了一些 onClickListener()。在运行应用程序时,列表视图中的按钮不可点击或分配给按钮的OnClickListener() 不会被触发。 一旦单击列表视图中的项目,此问题将不再出现。此后所有按钮单击侦听器都在工作。
有人可以给我一个解决方案吗?我正在使用的代码如下。
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
int listrowposition = arg2;
HashMap<String, String> item = (HashMap<String, String>) arg0
.getAdapter().getItem(arg2);
final String id = item.get("ID");
Button vd = (Button) arg1.findViewById(R.id.viewDetails);
// this onclick listener is not working bfore the onitemclick
// listener
vd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
Toast.makeText(getApplicationContext(),
"view details clicked Id " + id,
Toast.LENGTH_LONG).show();
}
});
Button gd = (Button) arg1.findViewById(R.id.getDirections);
// this onclick listener is not working bfore the onitemclick
// listener
gd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
Toast.makeText(getApplicationContext(),
"getDirections clicked Id " + id,
Toast.LENGTH_LONG).show();
}
});
Button ra = (Button) arg1.findViewById(R.id.reqAppointment);
// this onclick listener is not working bfore the onitemclick
// listener
ra.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
Toast.makeText(getApplicationContext(),
"reqAppointment clicked Id " + id,
Toast.LENGTH_LONG).show();
}
});
}
});
我使用的适配器是 SimpleAdapter。适配器详细信息如下。
String[] from = { "flag", "txt", "cur", "viewDet", "getDirect",
"reqAppnmnt" };
// Ids of views in listview_layout
int[] to = { R.id.flag, R.id.name, R.id.specialization,
R.id.viewDetails, R.id.getDirections, R.id.reqAppointment };
// Instantiating an adapter to store each items
// R.layout.listview_layout defines the layout of each item
adapter = new SimpleAdapter(getBaseContext(), aList,
R.layout.listview_layout, from, to);
new CallToServer(adapter, aList).execute("");
// Getting a reference to listview of main.xml layout file
ListView listView = (ListView) findViewById(R.id.listview);
// Setting the adapter to the listView
listView.setAdapter(adapter);
listView.setOnScrollListener(this);
【问题讨论】:
-
添加您的适配器代码,最好在适配器代码中编写,这样它才能工作
-
@AndoMasahashi 我已经用适配器详细信息编辑了问题
-
创建自定义适配器。
-
@Rohit5k2 为什么需要这样做。以及 buttonclick 与此的关系。
-
因为只有当您单击列表视图项时,您的侦听器才会分配给按钮。如果您想一直处于活动状态,则需要制作自定义适配器。