编辑列表视图中的文本是否为空

时间:2016-03-23 06:02:38

标签: android iteration

在我的列表视图中,我有Edittext和一些textviews。当我尝试迭代listview以获取edittext值时,我遇到了一些问题。我想仅在edittext中的listview不为空时才执行操作。否则我想继续迭代。当迭代edittexts时,我只需要来自listview的非空值。我的listview名称是“list”。 我的代码是

if (list != null) {
            for (int i = 0; i < list.getChildCount(); i++) {
                ed2 = (EditText) list.getChildAt(i).findViewById(R.id.pcs);
                if (ed2.getText().toString().trim().length() != 0) {
                    TextView im_codetext = (TextView) vie.findViewById(R.id.code);
                    imcode = im_codetext.getText().toString();
                    try {
                        DatabaseHelper dbHelper = new DatabaseHelper(this.getApplicationContext());
                        newDB = dbHelper.getWritableDatabase();
                        Cursor cr = newDB.rawQuery("select distinct im_srp_pc, im_subgroup_code  from itemmaster where im_code =" + imcode, null);

                        while (cr.moveToNext()) {
                            srppc = cr.getString(cr.getColumnIndex("im_srp_pc"));
                            String subcode = cr.getString(cr.getColumnIndex("im_subgroup_code"));
                            databas.put("subgp", subcode);
                        }
                        srps = Float.valueOf(srpval);
                        qtys = Integer.valueOf(ed2.getText().toString());

                    } catch (NumberFormatException e) {
                        srps = 0;
                    }
                    float amnts = srps * qtys;
                    sumnet = sumnet + amnts;
                    else{
                        Log.v(" empty", " empty");
                    }

                }
            }
        }

我的适配器类是

 public  class MyListAdapter extends BaseAdapter{

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            if(datas != null && datas.size() != 0){
                return datas.size();    
            }
            return 0;
        }

        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return datas.get(position);
        }

        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return position;
        }

        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {

            //ViewHolder holder = null;
            final  ViewHolder holder;
            if (convertView == null) {

                holder = new ViewHolder();
                LayoutInflater inflater = Orders.this.getLayoutInflater();
                convertView = inflater.inflate(R.layout.order_simple_row, null);
                holder.textView1 = (TextView) convertView.findViewById(R.id.name);
                holder.textView2 = (TextView) convertView.findViewById(R.id.srp);
                holder.textview3 = (TextView) convertView.findViewById(R.id.code);
                                    holder.editText2 = (EditText) convertView.findViewById(R.id.pcs); 

                convertView.setTag(holder);

            } else {

                holder = (ViewHolder) convertView.getTag();
            }
            holder.ref = position;
            String [] names = new String[550];
            String [] codes = new String[550];
            String [] prize = new String[550];

                DatabaseHelper dbHelper = new DatabaseHelper(Orders.this.getApplicationContext());
            newDB = dbHelper.getWritableDatabase();
            Cursor c = newDB.rawQuery("select distinct im_code ,im_desc ,im_srp "
                    + " from itemmaster", null);

                c.moveToFirst();

                while (c.moveToNext()){

                    Log.v("item detailss", c.toString());   
               String cod = c.getString(c.getColumnIndex("im_code"));
             codes[c.getPosition()] =cod;
                String desc1  = c.getString(c.getColumnIndex("im_desc"));
                names[c.getPosition()] = desc1;

                 String price = c.getString(c.getColumnIndex("im_srp"));
                prize[c.getPosition()] = price;
                                }

                 holder.textView1.setText(names[position+1]);
                holder.textview3.setText(codes[position+1]);
                     holder.textView2.setText(prize[position+1]);



            holder.editText2.setText(arrTemp[position]);

            holder.editText2.addTextChangedListener(new TextWatcher() {

                @Override
                public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                        int arg3) {
                    // TODO Auto-generated method stub
                     // arrTemp[holder.ref] = arg0.toString();
                }

                @Override
                public void afterTextChanged(Editable arg0) {
                    // TODO Auto-generated method stub
                    arrTemp[holder.ref] = arg0.toString();

                }
            });

            return convertView;


    }
        private class ViewHolder {

             public Object list;
            TextView textView1,textView2,textview3;
         EditText editText1,editText2;
             int ref;
            }
    }

请提前帮助。谢谢。

1 个答案:

答案 0 :(得分:0)

我有一个解决方案。

在自定义适配器类中声明HashMap。

public class CustomAdapter extends BaseAdapter{

    public HashMap<Integer,String> textMap = new HashMap<Integer,String>();
    ....

在getView()方法中从HasMap获取文本并在EditText中设置。

 @Override

public View getView(final int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    final Holder holder=new Holder();
    View rowView;
    rowView = inflater.inflate(R.layout.list_item, null);

    holder.editText = (EditText)rowView.findViewById(R.id.editText);

    holder.editText.setText(textMap.get(position));
    ....

在TextChangeListner中按位置在HashMap中添加文本。

holder.editText.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
                // TODO Auto-generated method stub

            }

            @Override
            public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                                          int arg3) {
                // TODO Auto-generated method stub
                // arrTemp[holder.ref] = arg0.toString();
            }

            @Override
            public void afterTextChanged(Editable arg0) {
                // TODO Auto-generated method stub

                textMap.put(position,holder.editText.getText().toString());

            }
        });

现在,在您的Activity中,您可以获取适配器的HashMap并按位置获取其值。如果特定位置没有文字,则表示edttext为空。

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        button = (Button)findViewById(R.id.button);
        listView = (ListView)findViewById(R.id.listView);
        final CustomAdapter customAdapter = new CustomAdapter(this,names);
        listView.setAdapter(customAdapter);


        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {



                for(int i=0;i<names.length;i++){


                    Toast.makeText(MainActivity.this, customAdapter.textMap.get(i), Toast.LENGTH_SHORT).show();

                }

            }
        });