我正在为Android
开发一个练习项目的广告资源跟踪器应用。我使用SQLite
进行存储,而我的ListView
使用CursorAdapter
显示数据库的内容。我使用CursorLoader
从数据库中获取数据
我的ListView
中的每一行都有一对TextViews
和一个Button
。我计划使用Button
来减少数据库中所选项目的数量列/属性。
我在哪里设置按钮OnClick
的监听器?在我的Activity
班级或我的CursorAdapter
班级'bindView()
中?
我又如何从按钮单击中检测按钮被按下的行?
我已经使用ListView的onItemClickListener
将用户发送到详细的Activity,该Activity显示有关当前行的更多信息。那有一个id参数被传递。因此,我找到了可以用于每行按钮的等效项。
答案 0 :(得分:0)
查看以下内容。我使用了自定义适配器来添加onItemClickListener:
private class MyListAdapter(val ctx: Context, val values: List<MyListInformatin>) : ArrayAdapter<MyListInformatin>(ctx, -1, values) {
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
val rowView = inflater.inflate(R.layout.item_my_layout, parent, false)
rowView.setOnClickListener {
val detailsActivity = Intent(ctx, DetailsActivity::class.java)
detailsActivity.putExtra(DetailsActivity.ROUTE_NUMBER_PARAM, values.get(position).routeNumber)
val bundle = Bundle()
bundle.putParcelable(detailsActivity.ROUTE_NO_STRUCTURE_PARAM, values.get(position).strucutre)
detailsActivity.putExtra(detailsActivity.PARAM_BUNDLE, bundle)
ctx.startActivity(detailsActivity)
}
return rowView
}
}
答案 1 :(得分:0)
您可以在适配器内部创建一个接口,并在此接口中声明一个功能,例如** void itemClick(int position)**并在您的活动中实现该接口
对于void itemClick(int position)方法:-在
上定义holder.setOnClickListener() block like -
viewHolder.button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (yourInterface != null) {
yourInterface.itemClick(position);
}
}
});
有关详细说明,请参见下面的链接-
答案 2 :(得分:0)
此问题已得到解答,您需要将列表项设置为不可点击,并手动收听onClick
按钮事件,请在此处查看详细答案:Android : How to set onClick event for Button in List item of ListView
答案 3 :(得分:0)
public class MyCustomAdapter extend Adapter {
private MyOnClickListener mListener;
@Override
public View getView(int position, View view, ViewGroup parent)
{
...
// Your view
mContainer.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
mListener.onWholeItemClick(position);
}
});
// Your button
mButton.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
mListener.onButtonClick(position);
}
});
}
public void setListener(MyOnClickListener listener) {
this.mListener = listener;
}
// Listener interface
public interface MyOnClickListener() {
void onWholeItemClick(int position); // Can pass data as a parametter
void onButtonClick(int position);
}
}
public class MyActivity extend Activity implement MyOnClickListener() {
...
@Override
public void onCreate(...) {
mAdapter = new MyCustomAdapter(this);
mAdapter.setListener(this); // Pass the listener to adapter
}
@Override
public void onWholeItemClick(int position) {
//
}
@Override
public void onButtonClick(int position) {
//
}
}
如何完全处理点击事件
答案 4 :(得分:0)
在onBindViewHolder
中为该按钮添加标签。该标签可以是项目的位置或项目本身。 (标签可以是对象)
override fun onBindViewHolder(holder: ItemHolder, position: Int) {
CUSTOMMODEL item = items[position];
...
holder.button.setTag(item);
//OR
holder.button.setTag(position);
...
holder.button.setOnClickListener(clickListener);
}
在您的onClick(View view)
方法中,从视图中获取标签,您可以了解单击了哪个项目。