Android控制項ListView擷取item中EditText值,androidedittext

來源:互聯網
上載者:User

Android控制項ListView擷取item中EditText值,androidedittext

可以明確,現在沒有直接方法可以獲得ListView中每一行EditText的值.

    解決方案:重寫BaseAdapter,然後自行擷取ListView中每行輸入的EditText值.

    大概演算法:重寫BaseAdapter.getView函數,用一個數組儲存EditText中的值,根據position即數組下標,在getView中動態更新EditText和動態擷取EditText中的值.因為ListView中的item是複用的,如果不動態清空或動態擷取EditText中值,就會出現資料紊亂,或者沒資料.那麼在產生EditText的時候要監控其值的變化.儲存下來.

    代碼:

package com.exmyth.android;public class ListEditorAdapter extends BaseAdapter {    private LayoutInflater mInflater;    private List<Map<String, Object>> mData;// 儲存的EditText值    public Map<String, String> editorValue = new HashMap<String, String>();//    public ListEditorAdapter(Context context, List<Map<String, Object>> data) {        mData = data;        mInflater = LayoutInflater.from(context);        init();    }    // 初始化    private void init() {        editorValue.clear();    }    @Override    public int getCount() {        return mData.size();    }    @Override    public Object getItem(int position) {        return null;    }    @Override    public long getItemId(int position) {        return 0;    }    private Integer index = -1;    @Override    public View getView(int position, View convertView, ViewGroup parent) {        ViewHolder holder = null;        // convertView為null的時候初始化convertView。        if (convertView == null) {            holder = new ViewHolder();            convertView = mInflater.inflate(R.layout.listview_item, null);            holder.name = (TextView) convertView                    .findViewById(R.id.list_item_name);            holder.title = (TextView) convertView                    .findViewById(R.id.list_item_title);            holder.value = (EditText) convertView                    .findViewById(R.id.list_item_inputvalue);            holder.value.setTag(position);            holder.userkey = (TextView) convertView.findViewById(R.id.user_key);            holder.value.setOnTouchListener(new OnTouchListener() {                @Override                public boolean onTouch(View v, MotionEvent event) {                    if (event.getAction() == MotionEvent.ACTION_UP) {                        index = (Integer) v.getTag();                    }                    return false;                }            });            class MyTextWatcher implements TextWatcher {                public MyTextWatcher(ViewHolder holder) {                    mHolder = holder;                }                private ViewHolder mHolder;                @Override                public void onTextChanged(CharSequence s, int start,                        int before, int count) {                }                @Override                public void beforeTextChanged(CharSequence s, int start,                        int count, int after) {                }                @Override                public void afterTextChanged(Editable s) {                    if (s != null && !"".equals(s.toString())) {                        int position = (Integer) mHolder.value.getTag();                        mData.get(position).put("list_item_inputvalue",                                s.toString());// 當EditText資料發生改變的時候存到data變數中                    }                }            }            holder.value.addTextChangedListener(new MyTextWatcher(holder));            convertView.setTag(holder);        } else {            holder = (ViewHolder) convertView.getTag();            holder.value.setTag(position);        }        Object value = mData.get(position).get("list_item_name");        if (value != null) {            holder.name.setText((String) value);        }        value = mData.get(position).get("list_item_title");        if (value != null) {            holder.title.setText(value.toString());        }        value = mData.get(position).get("user_key");        if (value != null) {            holder.userkey.setText(value.toString());        } else {            holder.userkey.setText("-1");        }        value = mData.get(position).get("list_item_inputvalue");        if (value != null && !"".equals(value)) {            holder.value.setText(value.toString());        } else {            String key = mData.get(position).get("user_key").toString();            String inputValue = editorValue.get(key);            holder.value.setText(inputValue);        }        holder.value.clearFocus();        if (index != -1 && index == position) {            holder.value.requestFocus();        }        return convertView;    }    public final class ViewHolder {        public TextView name;        public TextView title;        public EditText value;// ListView中的輸入        public TextView userkey;// 用來定義的標誌性主鍵,可不用關心    }}

使用方法:

private List<Map<String, Object>> mCheckItemList = new ArrayList<Map<String, Object>>();

mAdapter = new ListEditorAdapter(this, mCheckItemList);

m_lvListView.setAdapter(mAdapter);

直接改變mCheckItemList中的資料,然後調用mAdapter.notifyDataSetChanged();就可以更新ListView的資料

當然,直接從mCheckItemList也可以獲得使用者在EditText中輸入的資料.比較方便

 

 

 

其他:

ListView list= (ListView)findViewById(R.id.list);//獲得listview

for (int i = 0; i < list.getChildCount(); i++) {
     LinearLayout layout = (LinearLayout)list.getChildAt(i);// 獲得子item的layout
     EditText et = (EditText) layout.findViewById(R.id.et);// 從layout中獲得控制項,根據其id
// EditText et = (EditText) layout.getChildAt(1)//或者根據位置,在這我假設TextView在前,EditText在後
     
     System.out.println("the text of "+i+"'s EditText:----------->"+et.getText());
}



安卓項目怎擷取Listview中ITEM的值

你的,5,12 是在同一個item裡面吧?

如果是,你可以這樣做:重寫listadapter,在getitem()函數中寫return a*b (a,b是5,12 或者19 26 ,總之就是你要在這個item上顯示的值)。
然後for迴圈調用listadapter的getitem(),擷取乘結果,然後相加。
望採納。
 
android 取得listview中item的值

TextView tvLoc= (TextView) arg1.findViewById(android.R.id.text1);

應該是這樣吧,主要看text1和text2是什麼控制項,相應改變TextView就行
 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.