android - 自定义适配器后无法在 Activity 中启用按钮编辑文本 afterTextChanged()
问题描述
在这个项目 MainFragment 中,自定义适配器类用于加载列表视图。适配器项由名为“PayMode”的 bean 类填充。在该适配器中有四个“TextView”和一个“EditText (allocatedAmt)”。那个 'EditText' 不是从那个 bean 类中填充的。'Edittext' Logcat 上的 AfterTextChanged 正确显示文本'editable.toString()'。
现在我需要为适配器中的“Edittext(allocatedAmt)”启用一个按钮(在 MainFragment 中)afterTextChanged 监听器。下面是我的代码。
适配器.java
public class PayModeAdapter extends ArrayAdapter<PayMode> {
Context context;
ArrayList<PayMode> list;
boolean isAllocatedFinished = false;
public PayModeAdapter(Context context, ArrayList<PayMode> list ) {
super(context, R.layout.row_pay_mode, list);
this.context = context;
this.list = list;
}
public boolean isAllocatedFinished() {
return isAllocatedFinished;
}
@Override
public View getView(final int position, final View convertView, final ViewGroup parent) {
LayoutInflater inflater = null;
View row = convertView;
Holder holder = null;
final PayMode payMode = list.get(position);
if (row == null)
{
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.row_pay_mode, parent, false);
holder = new Holder();
holder.mode = (TextView) row.findViewById(R.id.txtPayMode);
holder.date = (TextView) row.findViewById(R.id.txtPayDate);
holder.amt = (TextView)row.findViewById(R.id.txtAmount);
holder.remAmt = (TextView)row.findViewById(R.id.txtRemAmount);
holder.allocatedAmt = (EditText)row.findViewById(R.id.editAlloAmount);
holder.allocatedAmt.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
isAllocatedFinished = true;
Log.d("PAY_MODE_ADAPTER", "VALUE_IS: " + editable.toString());
}
});
row.setTag(holder);
}
else
{
holder = (Holder)row.getTag();
}
holder.mode.setText(payMode.getFPAYMODE_PAID_TYPE());
holder.date.setText(payMode.getFPAYMODE_PAID_DATE());
holder.amt.setText(payMode.getFPAYMODE_PAID_AMOUNT());
holder.remAmt.setText(payMode.getFPAYMODE_PAID_AMOUNT());
holder.allocatedAmt.setText("0.00");
return row;
}
class Holder {
TextView mode;
TextView date;
TextView amt;
TextView remAmt;
EditText allocatedAmt;
}
}
MainFragment.java
onCreateView(){
payModeArrayList = new PayModeDS(getActivity()).getAllPayModeDetails();
payModeAdapter = new PayModeAdapter(getActivity(), payModeArrayList);
if (payModeAdapter.isAllocatedFinished()){
bCancel.setEnabled(true);
}
}
解决方案
您可以尝试使用holder.allocatedAmt.setOnFocusChangeListener
并覆盖其onFocusChange
方法。
在里面onFocusChange
添加下面的代码
if(!hasFocus)
{
//your changes here
}
希望有帮助
推荐阅读
- highcharts - How to remove Board and HR/CFO from Highchart organization?
- r - 如何有条件地从向量中找到多个值?
- regex - RegEx:从匹配中排除模式
- c++ - 错误:从 'int (*)(int, int)' 到 'int' 的无效转换 [-fpermissive]
- redis - 将 Redis 从 v3.2.12 更新到 v6
- c - 使用对角线方法的并行 LCS 计算
- r - CCA 仅显示前 4 个变量
- spring-boot - 加载属性文件的单元测试用例
- python-3.x - 或工具拾取交付问题不适用于从数据库导入距离矩阵
- docker-compose - Traefix v1.7 静态证书和动态 acme 证书