Android的如何使可编辑的EditText一个ListView内 [英] Android how to make EditText editable inside a ListView

查看:147
本文介绍了Android的如何使可编辑的EditText一个ListView内的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个的ListView ,在每个项目编辑文本,我想知道我怎么可以让的EditText 编辑..这似乎做工精细如果我设置了安卓windowSoftInputMode =adjustPan入清单,但只有在某些设备上。在某些设备上的软键盘覆盖的EditText。

在另一边,如果我不把安卓windowSoftInputMode =adjustPan在清单中,的EditText 失去显示软键盘后,集中精力,我要触摸的EditText 多次,使其选中,就可以在里面写了。

请帮我解决这个问题。

注意:我已经看到了这个帖子:可调焦的EditText里面的ListView < /从那里>并没有什么帮助,我有比完全其它问题<​​/ P>

我犯了一个解决方法这虽然..也许会帮助别人

 公共类EditTextListAdapter扩展了BaseAdapter {

    / *笔记列表* /
    私人的ArrayList&LT; SomeData&GT; mSomeData = NULL;
    / *布局充气实例* /
    私人LayoutInflater mInflater;
    / *活动中* /
    私人语境mContext;

    / *确保这个常数是大于最大列表大小* /
    私有静态最终诠释DEFAULT_ID_VALUE = -1;
    / *用于保持笔记编辑文本行ID列表中* /
    私人诠释mNoteId = DEFAULT_ID_VALUE;

    / **
     * EditTextListAdapter适配器类的构造函数
     *
     * @参数范围内的活动范围内
     * /
    公共FirstTimesListAdapter(上下文的背景下){

        / *得到一个布局充气实例* /
        mInflater =(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        / *加载数据* /
        mSomeData = SomeData.instance()的getData()。
        / *保持中* /
        mContext =背景;
    }

    / **
     *返回选择的项
     *
     * @返回所选项目
     * /
    公众诠释getSelectedItem(){
        返回mSelectedItem;
    }

    公众诠释getCount将(){
        返回mSomeData.size();
    }

    公共对象的getItem(int i)以{
        返回mSomeData.get(ⅰ);
    }

    众长getItemId(int i)以{
        返回我;
    }

    公共查看getView(最终诠释索引,视图recycledView,ViewGroup中的ViewGroup){

        ViewHolder viewHolder;

        如果(recycledView == NULL){
            / *膨胀的列表项* /
            recycledView = mInflater.inflate(R.layout.listview_item_with_edit_text,ViewGroup中,假);
            / *获取链接到视图持有人的看法* /
            viewHolder =新ViewHolder();
            viewHolder.note =(EditText上)recycledView.findViewById(R.id.first_times_note);
            recycledView.setTag(viewHolder);
        } 其他 {
            / *重复使用相同的看法,我们加载在第一时间* /
            viewHolder =(ViewHolder)recycledView.getTag();
        }

        / *显示一些注意事项* /
        viewHolder.note.setText(mSomeData.getNotes());

        / *如果最后ID设置,从这个列表项目的编辑文本是pressed * /
        如果(mNoteId ==指数){

            / *使编辑文本recive焦点* /
            viewHolder.note.requestFocusFromTouch();
            / *使编辑文本的光标出现在文本的末尾* /
            viewHolder.note.setSelection(viewHolder.note.getText()长度());

            / *重置最后一个ID为默认值* /
            mNoteId = DEFAULT_ID_VALUE;
        }

        / *设置上编辑文本触摸监听器只是为了记录这是pressed编辑文本的索引* /
        viewHolder.note.setOnTouchListener(新View.OnTouchListener(){
            公共布尔onTouch(查看视图,MotionEvent motionEvent){
                如果(motionEvent.getAction()== MotionEvent.ACTION_UP){
                    / *获得感动列表项的索引* /
                    mNoteId =指数;
                }
                返回false;
            }
        });

        返回recycledView;
    }

    静态类ViewHolder {
        / *注输入* /
        的EditText笔记;
    }

}
 

I have a ListView with edit text in each items and I want to know how can I make the EditText editable.. It seems to work fine if I set the android:windowSoftInputMode="adjustPan" into the manifest but only on some devices. On some devices the soft keyboard covers the edittext.

On the other side, if I don't put android:windowSoftInputMode="adjustPan" in the manifest, the EditText looses focus after the soft keyboard is displayed and I have to touch the EditText multiple times to make it selected and can write in it.

Please help me solve this.

Note: I've seen this post: Focusable EditText inside ListView and nothing helped from there and I have totally other problem than that

解决方案

I made a workaround for this though.. maybe will help someone

public class EditTextListAdapter extends BaseAdapter {

    /* notes list */
    private ArrayList<SomeData> mSomeData = null;
    /* layout inflater instance */
    private LayoutInflater mInflater;
    /* activity context */
    private Context mContext;

    /* ensure that this constant is greater than the maximum list size */
    private static final int DEFAULT_ID_VALUE = -1;
    /* used to keep the note edit text row id within the list */
    private int mNoteId = DEFAULT_ID_VALUE;

    /**
     * EditTextListAdapter adapter class constructor
     *
     * @param context               activity context
     */
    public FirstTimesListAdapter(Context context) {

        /* get a layout inflater instance */
        mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        /* load the data */
        mSomeData = SomeData.instance().getData(); 
        /* keep the context */
        mContext = context;
    }

    /**
     * Returns the selected item
     *
     * @return selected item
     */
    public int getSelectedItem() {
        return mSelectedItem;
    }

    public int getCount() {
        return mSomeData.size();
    }

    public Object getItem(int i) {
        return mSomeData.get(i);
    }

    public long getItemId(int i) {
        return i;
    }

    public View getView(final int index, View recycledView, ViewGroup viewGroup) {

        ViewHolder viewHolder;

        if (recycledView == null) {
            /* inflate the list item */
            recycledView = mInflater.inflate(R.layout.listview_item_with_edit_text, viewGroup, false);
            /* get link to the view holder views */
            viewHolder = new ViewHolder();
            viewHolder.note = (EditText) recycledView.findViewById(R.id.first_times_note);
            recycledView.setTag(viewHolder);
        } else {
            /* reuse the same views we load the first time */
            viewHolder = (ViewHolder) recycledView.getTag();
        }

        /* display some notes */
        viewHolder.note.setText(mSomeData.getNotes());

        /* if the last id is set, the edit text from this list item was pressed */
        if (mNoteId == index) { 

            /* make the edit text recive focus */
            viewHolder.note.requestFocusFromTouch();
            /* make the edit text's cursor to appear at the end of the text */
            viewHolder.note.setSelection(viewHolder.note.getText().length());

            /* reset the last id to default value */
            mNoteId = DEFAULT_ID_VALUE;
        }

        /* set a touch listener on the edit text just to record the index of the edit text that was pressed */
        viewHolder.note.setOnTouchListener(new View.OnTouchListener() {
            public boolean onTouch(View view, MotionEvent motionEvent) {
                if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
                    /* get the index of the touched list item */
                    mNoteId = index;
                }
                return false;
            }
        });

        return recycledView;
    }

    static class ViewHolder {        
        /* note input */
        EditText note;
    }

}

这篇关于Android的如何使可编辑的EditText一个ListView内的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆