从edittext实例视图中获取数据

时间:2015-07-29 11:54:53

标签: java android android-edittext

我使用自定义布局创建了一个自定义的多个EditText字段。现在问题是当用户点击时,不知道如何从这些EditText中获取数据。这是按钮。

    b.setId(MY_BUTTON);
    b.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Toast toast;
            Log.w(TAG, "View Id: " + v.getId());
            toast = Toast.makeText(getApplicationContext(),"Cliquer",
                                   Toast.LENGTH_LONG);
            toast.setGravity(Gravity.TOP, 25,400);
            toast.show();
            saveForm();

            final Map<String, String> params = new HashMap<String, String>();
            LinearLayout root = (LinearLayout) findViewById(R.id.linearLayout1);
            View tempView;
            String assembledString = "";
            for (int i = 0; i < root.getChildCount(); i++) {
                tempView = root.getChildAt(i);
                if (tempView instanceof EditText) {
                    assembledString += ((EditText) tempView)
                                    .getText().toString();
                    params.put(name,assembledString);
                    Log.d(TAG,"Data EditText : "+ assembledString);
                }
            /*
             * EditText et = (EditText)
             * ((ViewGroup
             * )v.getParent()).getChildAt
             * (i);
             */

        }
        savePost(action, params);
   }
   });
   ll.addView(b);
我解决了我的问题 这是解决方案

    b.setOnClickListener(new View.OnClickListener() {
                                    public void onClick(View v) {
                                        Toast toast;
                                        Log.w(TAG, "View Id: " + v.getId());
                                        toast = Toast.makeText(getApplicationContext(),"Cliquer",
                                                Toast.LENGTH_LONG);
                                        toast.setGravity(Gravity.TOP, 25,400);
                                        toast.show();

                                         LinearLayout container = (LinearLayout) findViewById(R.id.linearLayout2);
                                         ViewGroup parent = container ;
                                         String[] array = new String[parent.getChildCount()];
                                         String[] arrayFields = new String[parent.getChildCount()];
                                         Map<String, String> params = new HashMap<String, String>();
                                         for (int i=0; i < parent.getChildCount(); i++){
                                            View child = parent.getChildAt(i);
                                            if (child instanceof EditText) 
                                            {
                                                EditText et = (EditText) child;
                                                array[i] = et.getText().toString();
                                                arrayFields[i] = et.getTag().toString();
                                                params.put( arrayFields[i],  array[i]);
                                                Log.d(TAG , "array : " +   array[i]);
                                                Log.d(TAG , "arrayFields: " +  arrayFields[i]);
                                                Log.d(TAG , "paramsString : " +   params);

                                            }
                                            else {  Log.d(TAG , "Mes autres Views : " + child );} 


                                        } 
                                         savePost(action, params);

                                    }
                                });
                                ll.addView(b);

2 个答案:

答案 0 :(得分:0)

您只需要更改以下行。

final Map<String, String> params = new HashMap<String, String>();

。通过

Map<String, String> params = new HashMap<String, String>(); 

答案 1 :(得分:0)

您的问题只能通过标记来解决。 使用 editText.setTag(position)保存位置,因为我显示或保存对象ID,无论你喜欢什么。

示例:

List<EditText> editTextList = new ArrayList<>();

for(EditText et : editTextList){
    String tempString = et.getText().toString();
    params.put(name, tempString);
}

现在你得到了你想要的东西。 :)

//这就是我解决的方法

您还可以使用列表保存EditTexts。

首先,在创建后将EditText添加到列表中。

其次,使用 editText.setTag(position)保存位置,因为我显示或保存对象ID,无论你喜欢什么。

在按钮上单击,您可以从EditText列表中获取数据。您还可以从EditText的标签中了解位置或ID。

希望这会对你有所帮助。这就是我解决的方式。

您的示例代码

List<EditText> editTextList = new ArrayList<>();

b.setId(MY_BUTTON);
b.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        Toast toast;
        Log.w(TAG, "View Id: " + v.getId());
        toast = Toast.makeText(getApplicationContext(),"Cliquer",
                Toast.LENGTH_LONG);
        toast.setGravity(Gravity.TOP, 25,400);
        toast.show();
        saveForm();

        final Map<String, String> params = new HashMap<String, String>();



            for(EditText et : editTextList){
                assembledString = et.getText().toString();
                params.put(name, assembledString);
            }

        savePost(action, params);
    }
});
ll.addView(b);