从listview中的edittext获取文本

时间:2013-03-07 05:40:13

标签: android listview delete-row

问题部分:1

我创建了一个活动,其中包含产品ID和产品名称作为列表项。每行包含一个edittext,可用于输入特定产品的数量。行还包含一个复选框,用于选择特定产品。

这就是列表的样子:

List

当我点击列表项时,我可以获取特定列表项的ID和名称,但我也希望获得用户为列表项输入的数量。

这是负责生成列表视图的活动

public class PollStationActivity extends Activity {     

    // Hashmap for ListView
            ArrayList<HashMap<String, String>> PSList = new ArrayList<HashMap<String, String>>();
            String status_code_from_prev;
            List<HashMap<String, String>> fillMaps=null;
            String alert_message;
            String quantity_message;

            //quantity edittext
            EditText quantity_edit;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

         setContentView(R.layout.activity_poll_station);


         //quantity edittext
         quantity_edit   = (EditText)findViewById(R.id.qty_editText);

        //database insertion
         DatabaseHelper db = new DatabaseHelper(this);
        ContentValues values = new ContentValues();
        try {
         db.createDataBase();
         values.put("_id", "1");
         values.put("name", "rose");
         db.insert(values);

        } catch (IOException e) {
         e.printStackTrace();
          }
        db.close();            


            ArrayList<TestItem> PSList = new ArrayList<TestItem>();            

             try {
              db.createDataBase();

              PSList =  db.getAllData();

             } catch (IOException e) {
              e.printStackTrace();
               }

             db.close();

              fillMaps = new ArrayList<HashMap<String, String>>();

                Iterator<TestItem> i = PSList.iterator();

                while(i.hasNext())
                {
                    HashMap<String, String> map = new HashMap<String, String>();
                    TestItem objPSItem = i.next();

                    map.put("name", objPSItem.NAME);
                    map.put("Id", objPSItem.ID);
                    //map.put("quantity", objPSItem.QUANTITY);
                    fillMaps.add(map);
                }


            Log.i("Size: ", ""+fillMaps.size());
            //populating listview from database
            ListView listView1 = (ListView) findViewById(R.id.poll_list_listView);          


              if (null != listView1 && null != PSList) {
                  listView1.setAdapter(new ListAdapter(PollStationActivity.this,
                 R.id.ListViewContainer, new String[fillMaps.size()]));

              }

    }       


    //class for the list and on click handler
    class ListAdapter extends ArrayAdapter<String> {
        private final Context context;
        private final String[] values;          

        public ListAdapter(Context context, int textViewResourceId,
                String[] objects) {
            super(context, textViewResourceId, objects);
            // TODO Auto-generated constructor stub
            this.context = context;
            this.values = objects;
        }

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

            LayoutInflater inflater = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            final View rowView = inflater.inflate(R.layout.list_layout, parent,
                    false);

            final HashMap<String, String> map =  fillMaps.get(position);

            TextView textView = (TextView) rowView
                     .findViewById(R.id.list_label_name);
                     textView.setText("("+map.get("Id")+") "+map.get("name"));          


            rowView.setOnClickListener(new View.OnClickListener() {

                public void onClick(View v) {

                    rowView.setBackgroundResource(R.drawable.list_bg_pressed);

                    Handler handler = new Handler();
                    Runnable r = new Runnable() {
                        public void run() {
                            rowView.setBackgroundResource(R.drawable.list_bg);

                        }
                    };
                    handler.postDelayed(r, 200);        

                    //alert box
                    AlertDialog.Builder alertDialog = new AlertDialog.Builder(PollStationActivity.this);

                     // Setting Dialog Title
                     alertDialog.setTitle("Please Note!");

                     // Setting Dialog Message
                     alertDialog.setMessage("Are you sure you want to select "+"("+map.get("Id")+") "+map.get("name")+"?");


                     // Setting Positive "Yes" Button
                     alertDialog.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                         public void onClick(DialogInterface dialog,int which) {

                         // Write your code here to invoke YES event
//                           Intent intent = new Intent(RegisterFirstActivity.this, RegisterSecondActivity.class);
//                              
//                              intent.putExtra("AC_Code", map.get(TAG_CODE));
//                              RegisterFirstActivity.this.startActivity(intent);

                         }
                     });

                     // Setting Negative "NO" Button
                     alertDialog.setNegativeButton("No", new DialogInterface.OnClickListener() {
                         public void onClick(DialogInterface dialog, int which) {
                         // Write your code here to invoke NO event

                         dialog.cancel();
                         }
                     });

                     // Showing Alert Message
                     alertDialog.show();

                }
            });

            return rowView;

        }
    }


    public void makeAToast(String str) {
        //yet to implement
        Toast toast = Toast.makeText(this,str, Toast.LENGTH_SHORT);
        toast.setGravity(Gravity.CENTER, 0, 0);
        toast.show();
    }

 }

这是 TestItem 类:

 public class TestItem {

public String ID;
public String NAME;
public String QUANTITY;
public boolean selected;

    // Empty constructor
    public TestItem(){

    }
    // constructor
    public TestItem(String id, String name, String quantity){
        this.ID = id;
        this.NAME = name;
        this.QUANTITY = quantity;
    }

    // constructor
    public TestItem(String name, String quantity){
        this.NAME = name;
        this.QUANTITY = quantity;
    }
    // getting ID
    public String getID(){
        return this.ID;
    }

    // setting id
    public void setID(String id){
        this.ID = id;
    }

    // getting name
    public String getName(){
        return this.NAME;
    }

    // setting name
    public void setName(String name){
        this.NAME = name;
    }

    // getting phone number
    public String getQuantity(){
        return this.QUANTITY;
    }

    // setting quantity
    public void setQuantity(String quantity){
        this.QUANTITY = quantity;
    }

    public boolean isSelected() {
        return selected;
    }

    public void setSelected(boolean selected) {
        this.selected = selected;
    }

 }

这是 activity_poll_station.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" 
        android:background="@drawable/main_bg">    


<RelativeLayout
    android:id="@+id/ListViewContainer"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/poll_label_textView"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="28dp" >

    <ListView
        android:id="@+id/poll_list_listView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true" >
    </ListView>

</RelativeLayout>



    </RelativeLayout>

这是 list_layout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/library_linear_layout"
    android:layout_width="match_parent"
    android:layout_height="70dp"
    android:layout_alignParentLeft="true"
    android:background="@drawable/list_bg"
    android:padding="5dp" >

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="44dp"
        android:background="@null" >

        <TextView
            android:id="@+id/list_label_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:text="name"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:textSize="17sp" />

        <CheckBox
            android:id="@+id/item_checkBox"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"/>

        <EditText
            android:id="@+id/qty_editText"
            android:layout_width="75dp"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:ems="10"
            android:maxLines="1"
            android:inputType="number" >

        </EditText>

    </RelativeLayout>

</LinearLayout>

我想如何从我为每个列表项创建的edittext中提取文本。如果我尝试提取

上的文字
rowView.setOnClickListener(new View.OnClickListener()
像这样:

// Setting Dialog Message
                     alertDialog.setMessage("Are you sure you want to select "+"("+map.get("Id")+") "+map.get("name")+"Quantity: "+quantity_edit.getText().toString()+"?");

由于null pointer exception

,我收到了rowView.setOnClickListener(new View.OnClickListener()

我该怎么办?应该做些什么?

提前致谢!

// --------------------------------------------- --------------------------------- //

问题部分:2

现在我想做点什么,我想在点击它时删除一个特定的行。该行只会从现有列表视图中删除,并会显示一个新列表,该怎么做?

再次感谢!

3 个答案:

答案 0 :(得分:2)

您首先需要获取EditText对象的引用,您可以使用findViewById

来执行此操作
quantity_edit = (EditText) view.findViewById("qty_editText");

答案 1 :(得分:2)

你有自定义适配器的覆盖getView方法。如下。

public class SimpleAdapter1 extends ArrayAdapter<Data> {

    public SimpleAdapter1(Context context, int textViewResourceId,
            List<Data> catDesc) {
        super(context, textViewResourceId, catDesc);
        this.items = (ArrayList<Data>) catDesc;
        this.context = context;
        itemsid = new ArrayList<Integer>();
        System.out.println(items);
    }

    @Override
    public View getView(final int position, View convertView,
            final ViewGroup parent) {
        View v = convertView;
        if (v == null) {
            LayoutInflater vi = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(R.layout.YourLayout, null);
        }

        edit = (EditText) v.findViewById(R.id.editText1);
        String tx = edit.getText().toString();
                return v;
       }
    }

答案 2 :(得分:0)

如果您对列表视图使用自定义适配器,那将非常简单。

你可以看到这个Custom Adapter for List View

,这个对你有用[{3}}