qq_53229165 2024-03-23 23:49 采纳率: 66.7%
浏览 2

安卓自定义控件最后一个方法edittext值不变

想问一下最后一个方法为什么edittext值没变化?

package com.example.ms;

import android.content.Context;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.util.Log;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;

/**
 * Created by xue on 2017-11-22.
 */

public class AmountView  extends LinearLayout implements View.OnClickListener, TextWatcher {

    private static final String TAG = "AmountView";
    private int amount = 0; //购买数量
    private int goods_storage = 1; //商品库存
    public static final int MSG_COUNT_OK = 1;// 获取购物车中商品的数量
    private OnAmountChangeListener mListener;
    private int num=0;
    private EditText etAmount;
    private Button btnDecrease;
    private Button btnIncrease;

    public AmountView(Context context) {
        super(context);
    }

    public AmountView(Context context, AttributeSet attrs) {
        super(context, attrs);

        LayoutInflater.from(context).inflate(R.layout.number_add, this);
        etAmount = (EditText) findViewById(R.id.etAmount);
        btnDecrease = (Button) findViewById(R.id.btnDecrease);
        btnIncrease = (Button) findViewById(R.id.btnIncrease);

        btnDecrease.setOnClickListener(this);
        btnIncrease.setOnClickListener(this);
        etAmount.addTextChangedListener(this);

        TypedArray obtainStyledAttributes = getContext().obtainStyledAttributes(attrs, R.styleable.AmountView);
        int btnWidth = obtainStyledAttributes.getDimensionPixelSize(R.styleable.AmountView_btnWidth, LayoutParams.WRAP_CONTENT);
        int tvWidth = obtainStyledAttributes.getDimensionPixelSize(R.styleable.AmountView_tvWidth, 80);
        int tvTextSize = obtainStyledAttributes.getDimensionPixelSize(R.styleable.AmountView_tvTextSize, 0);
        int btnTextSize = obtainStyledAttributes.getDimensionPixelSize(R.styleable.AmountView_btnTextSize, 0);
        obtainStyledAttributes.recycle();
        //重新定义按钮布局大小
        LayoutParams btnParams = new LayoutParams(btnWidth, LayoutParams.MATCH_PARENT);
        btnDecrease.setLayoutParams(btnParams);
        btnIncrease.setLayoutParams(btnParams);
        if (btnTextSize != 0) {
            btnDecrease.setTextSize(TypedValue.COMPLEX_UNIT_PX, btnTextSize);
            btnIncrease.setTextSize(TypedValue.COMPLEX_UNIT_PX, btnTextSize);
        }

        LayoutParams textParams = new LayoutParams(tvWidth, LayoutParams.MATCH_PARENT);
        etAmount.setLayoutParams(textParams);
        if (tvTextSize != 0) {
            etAmount.setTextSize(tvTextSize);
        }
    }
    //商品数量变化
    public void setOnAmountChangeListener(OnAmountChangeListener onAmountChangeListener) {
        this.mListener = onAmountChangeListener;
    }
    //库存数量
    public void setGoods_storage(int goods_storage) {
        this.goods_storage = goods_storage;
    }

    @Override
    public void onClick(View v) {
        int i = v.getId();//判断是加是减
        if (i == R.id.btnDecrease) {
            if (amount > 0) {
                amount--;
                Log.d(TAG, "onClick:===== "+amount);
                etAmount.setText(amount + "");
            }
        } else if (i == R.id.btnIncrease) {
            if (amount < goods_storage) {
                amount++;
                etAmount.setText(amount + "");
            }
        }
        //清除焦点
        etAmount.clearFocus();
        //改变数量值
        if (mListener != null) {
            mListener.onAmountChange(this, amount);
        }
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {

    }
    //变化后的数量值
    @Override
    public void afterTextChanged(Editable s) {
        if (s.toString().isEmpty())
            return;
        amount = Integer.valueOf(s.toString());
        if (amount > goods_storage) {
            etAmount.setText(goods_storage + "");
            return;
        }

        if (mListener != null) {
            mListener.onAmountChange(this, amount);
        }
    }

    public interface OnAmountChangeListener {
        void onAmountChange(View view, int amount);
    }

    // 添加一个公共方法来设置EditText的值
    public void setAmountText(String text) {
        num=Integer.parseInt(text);
        System.out.println("2"+num);
        etAmount.setText(num+"");
        //改变数量值
        if (mListener != null) {
            System.out.println("3"+num);
            mListener.onAmountChange(this, num);
            System.out.println("4"+num);
        }
    }
}
  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2024-03-23 23:49
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    在您提供的代码中,setAmountText 方法用于设置 EditText 的值,并调用 onAmountChange 回调。但是,这个方法并没有被其他任何地方直接调用,所以 EditText 的值没有发生变化。

    如果要在外部调用 setAmountText 来更新 EditText 的值,你需要确保在适当的地方执行这个方法。例如,你可能在某个按钮点击事件或者从服务器获取数据后调用它。下面是一个例子:

    // 假设这是你的Activity或Fragment
    public class YourActivity extends AppCompatActivity {
    
        private YourCustomView yourCustomView;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            yourCustomView = findViewById(R.id.your_custom_view);
            
            // 假设你从服务器获取了一个新的数量值
            String newTextFromServer = "10";
            
            // 调用setAmountText方法来更新EditText的值
            yourCustomView.setAmountText(newTextFromServer);
        }
    }
    

    在这个例子中,setAmountText 方法会被调用并更新 EditText 的值。请确保在需要更新 EditText 的地方调用这个方法。如果你没有在任何地方调用它,那么 EditText 的值当然不会改变。

    评论

报告相同问题?

问题事件

  • 修改了问题 3月23日
  • 创建了问题 3月23日

悬赏问题

  • ¥15 vue3+electron打包获取本地视频属性,文件夹里面有ffprobe.exe 文件还会报错这是什么原因呢?
  • ¥20 用51单片机控制急停。
  • ¥15 孟德尔随机化结果不一致
  • ¥15 在使用pyecharts时出现问题
  • ¥15 深度学习残差模块模型
  • ¥50 怎么判断同步时序逻辑电路和异步时序逻辑电路
  • ¥15 差动电流二次谐波的含量Matlab计算
  • ¥15 Can/caned 总线错误问题,错误显示控制器要发1,结果总线检测到0
  • ¥15 C#如何调用串口数据
  • ¥15 MATLAB与单片机串口通信