Java 我无法使用自定义arrayadapter在自定义listview中执行按钮单击

Java 我无法使用自定义arrayadapter在自定义listview中执行按钮单击,java,android,xml,listview,Java,Android,Xml,Listview,我在这里搜索了很多问题,并且已经实现了我从这里得到的每个答案,但是没有人解决这个问题。我在自定义列表视图的一行中有两个按钮,我想单击它们执行操作。这是我的自定义适配器和xml代码 编辑 CartAadpter.java public class CartAdapter extends ArrayAdapter<CartItemListData> { Context context; int layoutResourceId; ArrayL

我在这里搜索了很多问题,并且已经实现了我从这里得到的每个答案,但是没有人解决这个问题。我在自定义列表视图的一行中有两个按钮,我想单击它们执行操作。这是我的自定义适配器和xml代码

编辑

CartAadpter.java

        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"