【问题标题】:How to edit EditText如何编辑编辑文本
【发布时间】:2017-02-12 12:50:53
【问题描述】:

我有一个由 TextView、EditText 和 Checkbox 组成的列表视图。列表视图中每个项目的布局如下所示。我现在的问题是我不能 编辑editText,当我触摸editText进行编辑时,光标会跳开,我无法编辑editText中的值。

为了解决这个问题,我参考了一些帖子,并在 EditText 中添加了以下两行

android:focusable="true"
android:focusableInTouchMode="true"

但并没有解决问题

请看下面发布的getView()方法。

请告诉我如何解决这个问题以编辑 EditText

项目布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:weightSum="3">

<TextView
    android:id="@+id/tv"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"/>

<EditText
    android:id="@+id/et"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:cursorVisible="true"
    android:focusable="true"
    android:focusableInTouchMode="true"/>

<CheckBox
    android:id="@+id/cb"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"/>

getView

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub

    View view = null;

    if (convertView == null) {
        LayoutInflater layoutinflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        view = layoutinflater.inflate(R.layout.model, null);

        final ViewHolder holder = new ViewHolder();

        holder.tv = (TextView) view.findViewById(R.id.tv);
        holder.cb = (CheckBox) view.findViewById(R.id.cb);
        holder.et = (EditText) view.findViewById(R.id.et);

        holder.cb.setOnCheckedChangeListener(new OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                // TODO Auto-generated method stub

                ItemDesign element = (ItemDesign) holder.cb.getTag();
                element.setChecked(buttonView.isChecked());
            }
        });

        holder.cb.setTag(designList.get(position));
        holder.et.setTag(designList.get(position));
        holder.tv.setTag(designList.get(position));
        //holder.et.setFocusable(false);
        view.setTag(holder);
    } else {
        view = convertView;
        ((ViewHolder)view.getTag()).et.setTag(designList.get(position));
        ((ViewHolder)view.getTag()).tv.setTag(designList.get(position));
        ((ViewHolder)view.getTag()).cb.setTag(designList.get(position));
        //((ViewHolder)view.getTag()).et.setFocusable(false);
    }
    ViewHolder holder = (ViewHolder) view.getTag();
    holder.tv.setText(designList.get(position).getTxt());
    holder.cb.setChecked(designList.get(position).isChecked());
    holder.et.setText(designList.get(position).getEtTxt());
    //holder.et.setFocusable(false);
    return view;
}
private class ViewHolder {
    TextView tv;
    CheckBox cb;
    EditText et;
}

【问题讨论】:

标签: android listview android-edittext baseadapter


【解决方案1】:

我认为您的问题与您添加的这三行代码无关

android:cursorVisible="true"
android:focusable="true"
android:focusableInTouchMode="true"

您可以删除它们。问题出在这条线。你将EditText 宽度设置为零。

android:layout_width="0dp"

改变它,你很高兴

android:layout_width="wrap_content"

【讨论】:

  • 在这种情况下不是,因为他使用的是layout-weight,所以在这种情况下0dp的宽度是正确的。
  • @Mehran Zamani 你的问题是发布答案而不检查他是否给出了 layout_weigh
  • 转义定义 android:layout_width 似乎很合理,不将其设置为 0dp
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多