Java 我无法使用自定义arrayadapter在自定义listview中执行按钮单击
我在这里搜索了很多问题,并且已经实现了我从这里得到的每个答案,但是没有人解决这个问题。我在自定义列表视图的一行中有两个按钮,我想单击它们执行操作。这是我的自定义适配器和xml代码 编辑 CartAadpter.javaJava 我无法使用自定义arrayadapter在自定义listview中执行按钮单击,java,android,xml,listview,Java,Android,Xml,Listview,我在这里搜索了很多问题,并且已经实现了我从这里得到的每个答案,但是没有人解决这个问题。我在自定义列表视图的一行中有两个按钮,我想单击它们执行操作。这是我的自定义适配器和xml代码 编辑 CartAadpter.java public class CartAdapter extends ArrayAdapter<CartItemListData> { Context context; int layoutResourceId; ArrayL
public class CartAdapter extends ArrayAdapter<CartItemListData> {
Context context;
int layoutResourceId;
ArrayList<CartItemListData> data = new ArrayList<CartItemListData>();
LayoutInflater mInflater;
CartItemListData listData;
CartDatabaseHelper db;
int i;
public CartAdapter(Context context, ArrayList<CartItemListData> data) {
super(context, R.layout.cart_listitems, data);
mInflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this.context = context;
this.data = data;
notifyDataSetChanged();
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
mInflater = LayoutInflater.from(context);
convertView = mInflater.inflate(R.layout.cart_listitems, parent,
false);
holder = new ViewHolder();
holder.text = (TextView) convertView
.findViewById(R.id.cart_item_id);
holder.text1 = (TextView) convertView
.findViewById(R.id.cart_item_boxes);
holder.edit = (Button) convertView.findViewById(R.id.editdata);
holder.delete = (Button) convertView.findViewById(R.id.deletedata);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
listData = data.get(position);
// Button's Tag
holder.edit.setTag(data.get(position).getId());
holder.delete.setTag(data.get(position).getId());
// SetText to Textview
holder.text.setText(data.get(position).getTilesId());
holder.text1.setText(String.valueOf(listData.getNumberOfBox()));
Log.e("Database Data ID: ", listData.getId() + " " + position);
holder.edit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(final View v) {
i = data.get(position).getId();
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("Edit Box");
builder.setMessage("Please Enter Number of Box.");
final EditText editText = new EditText(context);
editText.setInputType(InputType.TYPE_CLASS_NUMBER);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT);
editText.setLayoutParams(lp);
builder.setView(editText);
builder.setNegativeButton("Cancel", null);
builder.setPositiveButton("Ok",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
if (editText.getText().toString() == null
&& editText.getText().length() == 0) {
Toast.makeText(
context,
"To delete Data use \"delete button\"",
Toast.LENGTH_LONG).show();
} else {
int data = Integer.parseInt(editText
.getText().toString());
if (data <= 0) {
Toast.makeText(
context,
"To delete Item Please use delete button",
Toast.LENGTH_LONG).show();
} else {
Log.e("Edited", "Yes");
CartDatabaseHelper cartDatabaseHelper = new CartDatabaseHelper(
context);
cartDatabaseHelper
.updateCart(new CartItemListData(
i, holder.text
.getText()
.toString(),
data));
CartAdapter.this.data.clear();
CartAdapter.this.data.add(listData);
notifyDataSetChanged();
}
}
}
});
builder.create().show();
}
});
holder.delete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.e("Deleted", "Yes");
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("Delete!!");
builder.setMessage("Deleting Item from List!!!");
builder.setIcon(R.drawable.ic_alerts_and_states_warning);
builder.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
db = new CartDatabaseHelper(context);
db.delete_cartitem(data.get(position).getId());
data.remove(position);
notifyDataSetChanged();
}
});
builder.setNegativeButton("No", null);
builder.create().show();
}
});
return convertView;
}
static class ViewHolder {
TextView text, text1;
Button edit, delete;
}
}
公共类CartAdapter扩展了ArrayAdapter{
语境;
国际布局资源;
ArrayList数据=新的ArrayList();
拉平机;
CartItemListData listData;
CartDatabaseHelper数据库;
int i;
公共CartAdapter(上下文、ArrayList数据){
super(上下文、R.layout.cart\u列表项、数据);
mInflater=(LayoutInflater)上下文
.getSystemService(上下文布局\充气机\服务);
this.context=上下文;
这个数据=数据;
notifyDataSetChanged();
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
最终持票人;
if(convertView==null){
mInflater=LayoutInflater.from(上下文);
convertView=mInflater.充气(R.layout.cart\u列表项,父项,
假);
holder=新的ViewHolder();
holder.text=(TextView)convertView
.findviewbyd(R.id.cart\u item\u id);
holder.text1=(TextView)convertView
.findViewById(R.id.cart\u item\u Box);
holder.edit=(按钮)convertView.findViewById(R.id.editdata);
holder.delete=(按钮)convertView.findViewById(R.id.deletedata);
convertView.setTag(支架);
}否则{
holder=(ViewHolder)convertView.getTag();
}
listData=data.get(位置);
//按钮标签
holder.edit.setTag(data.get(position.getId());
holder.delete.setTag(data.get(position.getId());
//设置文本到文本视图
holder.text.setText(data.get(position.getTilesId());
holder.text1.setText(String.valueOf(listData.getNumberOfBox());
Log.e(“数据库数据ID:”,listData.getId()+“”+位置);
holder.edit.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(最终视图v){
i=data.get(position.getId();
AlertDialog.Builder=新建AlertDialog.Builder(上下文);
builder.setTitle(“编辑框”);
setMessage(“请输入框的编号”);
最终编辑文本=新编辑文本(上下文);
editText.setInputType(InputType.TYPE\类别\编号);
LinearLayout.LayoutParams lp=新的LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_父级,
LinearLayout.LayoutParams.MATCH_PARENT);
editText.setLayoutParams(lp);
builder.setView(editText);
builder.setNegativeButton(“取消”,null);
builder.setPositiveButton(“确定”,
新建DialogInterface.OnClickListener(){
@凌驾
公共void onClick(对话框接口对话框,
int(其中){
如果(editText.getText().toString()==null
&&editText.getText().length()=0){
Toast.makeText(
上下文
“要删除数据,请使用\“删除按钮\”,
Toast.LENGTH_LONG).show();
}否则{
int data=Integer.parseInt(编辑文本
.getText().toString());
如果(数据请尝试此方法
将此cartlist_row.xml添加到父级Linearlayout
android:clickable="false"
android:descendantFocusability="blocksDescendants"
android:focusable="false"
android:focusableInTouchMode="false"
对于按钮
添加此
android:clickable="false"
android:focusable="false"
android:focusableInTouchMode="false"
和AlertDialog.Builder不工作,您从未使用过show()…请交叉检查..使用
AlertDialog alert=builder.create();alert.show();
我不确定,但请尝试holder.edit.setOnClickListener(新视图.OnClickListener())
而不是holder.edit.setOnClickListener(新的OnClickListener()).您是否尝试过clickable=true
属性..是的,但仍然不起作用。您好,请查看我的答案。希望可以帮助您…您好,请查看我的答案。希望可以帮助您我认为onClick起作用,但AlertDialog.Builder不起作用,您从未使用过show()…请交叉检查..使用AlertDialog alert=builder.create();alert.show();愚蠢的我!!完成了整个代码,但忘了放show().onClick正在工作..?是的。谢谢你的帮助。你试过打印日志吗?在onClick方法下打印日志消息。所以,你可以测试你的onClick方法是否被调用?或者你的listview上是否有任何视图。我的意思是listview在任何其他视图的背景中..所以也可以参考它。当我们编写代码时,我们总是我们需要在AlertDialog Box中编写新的DialogInterface.OnClickListener(),因为它不会导入它。我已经打印了日志,现在它可以工作了,谢谢。
android:clickable="false"
android:descendantFocusability="blocksDescendants"
android:focusable="false"
android:focusableInTouchMode="false"
android:clickable="false"
android:focusable="false"
android:focusableInTouchMode="false"