【问题标题】:Get text from edittext inside a listview从列表视图中的edittext获取文本
【发布时间】:2013-02-22 05:20:00
【问题描述】:

问题部分:1

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

列表如下所示:

当我点击列表项时,我可以获得特定列表项的 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>

我想知道如何从我为每个列表项创建的编辑文本中提取文本。如果我尝试在

上提取文本
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()+"?");

由于rowView.setOnClickListener(new View.OnClickListener(),我正在生成null pointer exception

我该怎么办?应该如何解决?

提前致谢!

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

问题部分:2

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

再次感谢!

【问题讨论】:

标签: android listview delete-row


【解决方案1】:

您首先需要获取对EditText 对象的引用,您可以使用findViewById 来完成此操作

quantity_edit = (EditText) view.findViewById("qty_editText");

【讨论】:

  • 这是在activity类的oncreate方法中完成的,像这样: //quantity edittext quantity_edit = (EditText)findViewById(R.id.qty_editText);
  • 这是错误的!由于此 EditText 不在 activity_poll_station.xml 中,这就是您收到 NULL 异常的原因。尝试将我建议的代码段放在 onclick 事件中
  • 好的,完成了!但我可以看到它只选择列表中第一行的edittext的文本。但它无法从任何其他行中提取文本。
  • 我的回答对你有帮助,请你也将其标记为正确答案:)
  • 将其更改为 (EditText)findViewById(R.id.qty_editText) -> (EditText) v.findViewById(R.id.qty_editText)
【解决方案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;
       }
    }

【讨论】:

  • 我在哪里覆盖它?它将如何提供帮助?我从哪里调用这个类?
  • 在您的活动好友中。作为内部类。
  • 变量名出现错误,如果您不介意,能否建议我进行代码编辑?
  • 是的,朋友。但现在我有点忙。你能等一个小时吗?
  • TextView textView = (TextView) rowView .findViewById(R.id.list_label_name); textView.setText("("+map.get("Id")+") "+map.get("name")); 在此行下方,您可以通过这种方式找到您的 editText 正确的朋友。这样有问题的朋友。
【解决方案3】:

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

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

这个对你也有用how to get EditText value from listview

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 2013-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多