【问题标题】:Handling EditText Dynamically in Android在 Android 中动态处理 EditText
【发布时间】:2014-06-21 07:37:35
【问题描述】:

我想动态地从 EditText 获取值。当用户按下添加按钮时,我生成了很多 EditText。当用户按下添加按钮时,它每次生成 3 个 Edittext。我不知道如何从这个动态生成的 EditTtext 中获取值。现在我的问题是如何从每行的 3 Edittext 中获取值。我还需要验证用户是否删除了视图。请帮助我是新的 android 开发。当用户按下保存按钮时应该会发生这种情况。提前致谢!

这是课。

public class SecondActivity extends Activity {
    Button saveBtn,cancelBtn,addBtn;
    RelativeLayout layout;
    EditText third,first,second;
    LinearLayout Container;
    int counter=0;
    int all=0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second_activity);
        saveBtn=(Button) findViewById(R.id.save);
        cancelBtn=(Button) findViewById(R.id.cancel);
        Container=(LinearLayout) findViewById(R.id.container);
        addBtn=(Button) findViewById(R.id.addBtn);
        saveBtn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent=new Intent(SecondActivity.this,MainActivity.class);
                startActivity(intent);
                Toast.makeText(SecondActivity.this, "The Result: "+all,Toast.LENGTH_LONG).show();
                finish();
            }
        });
        cancelBtn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent=new Intent(SecondActivity.this,MainActivity.class);
                startActivity(intent);
                finish();
            }
        });
        addBtn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {               
                LayoutInflater layoutInflater = 
                        (LayoutInflater) getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                final View addView = layoutInflater.inflate(R.layout.row, null);
                Button buttonRemove = (Button)addView.findViewById(R.id.remove);
//              EditText ed1=(EditText) findViewById(R.id.editText1);
//              EditText ed2=(EditText) findViewById(R.id.editText2);
//              EditText ed3=(EditText) findViewById(R.id.editText3);
//              all=all+Integer.parseInt(ed1.getText().toString())+Integer.parseInt(ed2.getText().toString())+Integer.parseInt(ed3.getText().toString());
                buttonRemove.setOnClickListener(new OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        ((LinearLayout)addView.getParent()).removeView(addView);                
                    }});
                Container.addView(addView);
            }});
    }

}

这是我的 row.xml。我在 java 代码中用作视图。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="10dip" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:text="Field 1" />

    <EditText
        android:id="@+id/editText1"
        android:layout_width="70dip"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/textView1"
        android:inputType="numberPassword" >
    </EditText>

    <EditText
        android:id="@+id/editText2"
        android:layout_width="70dip"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/editText1"
        android:layout_alignBottom="@+id/editText1"
        android:layout_toRightOf="@+id/editText1"
        android:inputType="numberPassword" />

    <Button
        android:id="@+id/remove"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/editText2"
        android:layout_alignParentRight="true"
        android:text="Remove" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/editText2"
        android:layout_alignLeft="@+id/editText2"
        android:text="Field 2" />

    <EditText
        android:id="@+id/editText3"
        android:layout_width="70dip"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/editText2"
        android:layout_alignBottom="@+id/editText2"
        android:layout_toRightOf="@+id/editText2"
        android:editable="false"
        tools:ignore="Deprecated" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/editText3"
        android:layout_alignLeft="@+id/editText3"
        android:text="Field 3" />

</RelativeLayout>


This is my layout which is attached with my activity class.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_alignParentTop="true"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".SecondActivity" >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <Button
            android:id="@+id/addBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:text="Add" />
    </RelativeLayout>

    <ScrollView
        android:layout_width="wrap_content"
        android:layout_height="300dp" >

        <LinearLayout
            android:id="@+id/container"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >
        </LinearLayout>
    </ScrollView>

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

        <Button
            android:id="@+id/save"
            android:layout_width="146dip"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentLeft="true"
            android:text="Save" />

        <Button
            android:id="@+id/cancel"
            android:layout_width="146dip"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true"
            android:text="Cancel" />

        <EditText
            android:id="@+id/editText1"
            android:layout_width="70dip"
            android:layout_height="wrap_content"
            android:layout_above="@+id/save"
            android:layout_alignParentLeft="true"
            android:editable="false"
            android:hint="T 1"
            tools:ignore="Deprecated" >
        </EditText>

        <EditText
            android:id="@+id/editText2"
            android:layout_width="70dip"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@+id/editText1"
            android:layout_toRightOf="@+id/editText1"
            android:editable="false"
            android:hint="T 2"
            tools:ignore="Deprecated" >
        </EditText>

        <EditText
            android:id="@+id/editText3"
            android:layout_width="70dip"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@+id/editText2"
            android:layout_toRightOf="@+id/editText2"
            android:editable="false"
            android:hint="T 3"
            tools:ignore="Deprecated" />

        <EditText
            android:id="@+id/editText4"
            android:layout_width="70dip"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@+id/editText3"
            android:layout_alignParentRight="true"
            android:editable="false"
            android:hint="T 4"
            tools:ignore="Deprecated,HardcodedText" />
    </RelativeLayout>

</LinearLayout>

【问题讨论】:

  • 你可以在动态创建编辑文本时添加标签
  • 在我看来,解决方案是使用自定义列表视图,其他任何事情都会让你的生活变得悲惨

标签: java android xml android-layout android-edittext


【解决方案1】:

这是您编辑的 SecondActivity.java

   public class SecondActivity extends Activity {
    Button             saveBtn, cancelBtn, addBtn;
    RelativeLayout     layout;
    EditText           third, first, second;
    LinearLayout       Container;
    int                counter = 0;
    int                all     = 0;
    int                tag     = 0;
    ArrayList<Integer> dynamicLayoutsTags;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second_activity);
        saveBtn = (Button) findViewById(R.id.save);
        cancelBtn = (Button) findViewById(R.id.cancel);
        Container = (LinearLayout) findViewById(R.id.container);
        addBtn = (Button) findViewById(R.id.addBtn);
        saveBtn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                if (dynamicLayoutsTags.size() > 0) {

                    for (int i = 0; i < dynamicLayoutsTags.size(); i++) {
                        View getView = Container
                                .findViewWithTag(dynamicLayoutsTags.get(i));
                        EditText editText1 = (EditText) getView
                                .findViewById(R.id.editText1);
                        EditText editText2 = (EditText) getView
                                .findViewById(R.id.editText2);
                        EditText editText3 = (EditText) getView
                                .findViewById(R.id.editText3);
                        Toast.makeText(
                                SecondActivity.this,
                                "Row " + i + " : " + "editext 1 is : "
                                        + editText1.getText()
                                        + " editext 2 is : "
                                        + editText2.getText()
                                        + " editext 3 is : "
                                        + editText3.getText(),
                                Toast.LENGTH_LONG).show();

                    }

                }

                Intent intent = new Intent(SecondActivity.this,
                        MainActivity.class);
                startActivity(intent);
                Toast.makeText(SecondActivity.this, "The Result: " + all,
                        Toast.LENGTH_LONG).show();
                finish();

            }
        });

        cancelBtn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent = new Intent(SecondActivity.this,
                        MainActivity.class);
                startActivity(intent);
                finish();
            }
        });
        addBtn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                LayoutInflater layoutInflater = (LayoutInflater) getBaseContext()
                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                final View addView = layoutInflater.inflate(R.layout.row, null);
                Button buttonRemove = (Button) addView
                        .findViewById(R.id.remove);
                addView.setTag(tag);
                buttonRemove.setTag(tag);
                dynamicLayoutsTags.add(tag);
                Container.addView(addView);
                tag++;
                buttonRemove.setOnClickListener(new OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        // ((LinearLayout) addView.getParent())
                        // .removeView(addView);
                        Integer removeTag = (Integer) v.getTag();
                        View deleteView = Container.findViewWithTag(removeTag);
                        Container.removeView(deleteView);
                        dynamicLayoutsTags.remove(removeTag);
                    }
                });

            }
        });
    }

    @Override
    protected void onResume() {
        super.onResume();
        tag = 0;
        dynamicLayoutsTags = new ArrayList<Integer>();
    }

}

【讨论】:

  • 我认为你没有明白我的意思..当用户按下添加按钮时我需要添加三个 EditText..现在我想从每行的这 3 个 edittext 中获取 valuea。
  • 是的,我的观点来自上面的代码,你希望你添加标签到那 3 个编辑文本中,当你在布局中添加那 3 个编辑文本时......你也可以参考那个标签来获取值。 . 我希望我现在就得到....
  • 我还没试过。我会告诉你的。
  • :( 好的 .. 我希望我的问题是你解释了还是我错了?
  • 你能告诉我把代码放在我的代码的什么地方吗?
猜你喜欢
  • 2010-12-02
  • 2020-12-06
  • 2011-12-14
  • 1970-01-01
  • 1970-01-01
  • 2021-01-28
  • 2013-07-05
  • 2012-02-22
  • 1970-01-01
相关资源
最近更新 更多