选择在ListView edittexts文本。 如何可以做什么? 我无法找到(Select

2019-06-24 16:54发布

我有在每一行的工作一个EditText一个ListView。

我需要选择点击的EditText无需清除或将光标移动到写号这段文字。

在第一部作品使用selectAllonfocus。 然而,滚动列表视图之后,EditText上变得疯狂和选择工作不正常。

如果我在听者的onfocus执行全选,则当触摸被取得的文本菜单(选择字,全选,等)被示出,而不是选择。

如果有人可以提供帮助。

谢谢。

Answer 1:

我不知道它是什么,你正在尝试做的。 也许它会帮助,如果你可以发布您的某些相关的源代码...

但是,它会在你开始滚动疯狂的事实让我的事情你没有正确处理convertView在适配器getView()方法。



Answer 2:

如果您在滚动后有问题,这是一个的搞乱您的观点回收。 你基本上需要建立一个数组滚动时它们不会搞砸举行EditTexts的内容,这样。 你没有说什么支持你的清单,但我有一个列表与包含edittexts,这里是我如何处理它(从游标,但你能适应它的ArrayAdapter):

public class CursorAdapter_EditText extends SimpleCursorAdapter {

    private static Cursor c;
    private Context context;
    public static String[] quantity;
    private int layout;

    public CursorAdapter_EditText(Context context, int layout, Cursor c,
                        String[] from, int[] to) {
        super(context, layout, c, from, to);
        CursorAdapter_EditText.c = c;
        this.context = context;
        this.layout = layout;
        initializeQuantity();    //  Call method to initialize array to hold edittext info
    }

    public static void initializeQuantity() {
        quantity = new String[c.getCount()];    //  Initialize array to proper # of items
        int i = 0;
        while (i < c.getCount()) {              
                        quantity[i] = "";       // set all EditTexts to empty
                        i++;
        }
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null)
                        convertView = View.inflate(context, layout, null);
        final int pos = position;
        View row = convertView;
        c.moveToPosition(position);
        TextView name = (TextView) row.findViewById(R.id.ListItem1);
        EditText qty = (EditText) row.findViewById(R.id.qty);
        qty.setOnFocusChangeListener(new View.OnFocusChangeListener() {  //  Set so EditText will be saved to array when you leave it
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if (!hasFocus) {
                    LinearLayout parent = (LinearLayout) v.getParent();            
                    EditText qtyTemp = (EditText) parent.findViewById(R.id.qty);   //  Get a reference to EditText (you could probaly use v here)
                    quantity[pos] = qtyTemp.getText().toString();              // Save contents of EditText to array
                }
            }
        });
        name.setText(c.getString(1));
        unit.setText(c.getString(3));
        qty.setText(quantity[position]);
        return (row);
    }
}

然后,我有一个处理该回到我的数据库这样的阵列外的按钮:

commit.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        int i = 0;
        itemCursor.moveToFirst();
        while (itemCursor.isAfterLast() == false) {
            if (CursorAdapter_EditText.quantity[i].equals("")) {
                CursorAdapter_EditText.quantity[i] = "0";
            }
            ;
            int tempQty = Integer
                    .parseInt(CursorAdapter_EditText.quantity[i]);
            if (tempQty != 0) {
                mDbHelper.createListItem(listId, itemCursor
                        .getInt(itemCursor
                                .getColumnIndex(GroceryDB.ITEM_ROWID)),
                        tempQty, 0);
            }
            i++;
            itemCursor.moveToNext();
        }
    }
});


Answer 3:

我处理正是通过执行以下操作同样的问题:

  1. 从XML与ListView中,机器人descendantFocusability = “beforeDescendants”:删除的Android windowSoftInputMode =从AndroidManifest “adjustPan” - 他们没有帮助。
  2. 子类的EditText

     public class TrickyEditText extends EditText { private boolean mFocused = false; private boolean mTouched = false; public TrickyEditText(Context context) { super(context); } public TrickyEditText(Context context, AttributeSet attrs) { super(context, attrs); } public TrickyEditText(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @TargetApi(Build.VERSION_CODES.LOLLIPOP) public TrickyEditText(Context context, AttributeSet attrs, int defStyleAttr, int style) { super(context, attrs, defStyleAttr, style); } @Override public boolean didTouchFocusSelect() { if (mTouched && mFocused) { return true; } else { return super.didTouchFocusSelect(); } } @Override public boolean onTouchEvent(MotionEvent event) { mTouched = true; return super.onTouchEvent(event); } @Override protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) { mFocused = focused; if (!focused) { mTouched = false; } super.onFocusChanged(focused, direction, previouslyFocusedRect); } } 
    1. 适配器代码

       public class TrickyAdapter extends ArrayAdapter { ............. @Override public View getView(int childPosition, View convertView, final ViewGroup parent) { ......... TrickyEditText et = ..... //initialize edittext et.setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(final View v, boolean hasFocus) { if (hasFocus) { v.post(new Runnable() { @Override public void run() { ((EditText)v).selectAll(); } }); } } }); ......... } } 

虽然它的工作非常好,这不是我很骄傲的......如果有人知道一个漂亮的解决方案,请告诉我密码!



Answer 4:

在您的适配器的getView方法,让你的EditView中(此代码,edittxt)做:

    edittxt.post(new Runnable() {
        public void run() {
            edittxt.requestFocusFromTouch();
            edittxt.selectAll();
            InputMethodManager lManager = (InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE); 
            lManager.showSoftInput(edittxt, 0);
        }
    }); 


Answer 5:

我能说什么,我问的是,试图选择列表视图edittexts的所有文字无法正常工作。 因此,而不是选择文本,我显示了当用户选择号码或任何一个对话框。



Answer 6:

不知道如果你还在寻找一个解决方案,但我找到了一种方法来做到这一点。 聚焦改变监听器添加到的EditText在适配器中的getView方法,并获得焦点时选择所有文本。

public View getView(int position, View convertView, ViewGroup parent) {
    View view = convertView;
    // blah blah blah

    EditText edit = (EditText) view.findViewById(R.id.editTextId);
    edit.setOnFocusChangeListener(new OnFocusChangeListener() {
        @Override
        public void onFocusChange(View view, boolean hasFocus) {
            if (hasFocus)
                ((EditText) view).selectAll();
        }
    });

    return view;
}

我已成立windowSoftInputMode到adjustPan的活动,虽然我不认为这对此事的任何影响。

我已经在Android 2.3及4测试这和它的作品。



文章来源: Select edittexts text in a listview. How can be done? I can't find out