0

我有一个像表单一样的自定义编辑文本。它有一个标签、编辑文本和一个按钮。我正在使用标签将其包含在布局中,以便我可以重复使用该表单。我希望按钮具有的功能是在单击时重现表单。第一次单击第一个表单时,这对我来说是可能的。但是,当我单击新表单的按钮时,没有任何操作。但是,如果我单击第一个表单按钮,则会创建一个新表单。这是我的 xml:我包括在内。

<?xml version="1.0" encoding="utf-8"?>

<TextView android:id="@+id/form_textview"
    android:layout_width="fill_parent" android:layout_height="wrap_content"
    android:textSize="14sp" android:text="Number:" />
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <EditText android:id="@+id/form_edittext"
        android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:layout_weight="1" />

    <ImageButton android:id="@+id/form_button"
        android:layout_width="wrap_content" android:layout_height="match_parent"
        android:src="@drawable/ic_menu_example" android:paddingLeft="1dp"
        android:paddingRight="1dp" />
</LinearLayout>

这就是我尝试动态添加新表单的方式:

public final void onClick(final View view) 
{

    if (view == findViewById(R.id.form_button))
    {
        try{
            LinearLayout layout = (LinearLayout) findViewById(R.id.contacteditll);

                LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                View tempView = vi.inflate(R.layout.form, null);
                numberEntryViews.add(tempView);

                layout.addView(tempView);
                ImageButton btn = (ImageButton) tempView.findViewById(R.id.form_button);

                btn.setOnClickListener(this);
            }
            catch (Exception e)
            {
                e.printStackTrace();
                Log.d(TAG, "Failed to inflate");
            }
        }
}

我已经尝试了各种方法来实现这一点,但我没有运气。任何帮助或建议将非常感谢。

4

2 回答 2

1

如果您单击新创建的按钮,此行将不正确

    if (view == findViewById(R.id.form_button))

您可以为新创建的按钮分配一个固定的 id,或者尝试使用偏移量

于 2011-06-28T13:36:30.840 回答
0

我想我必须制作一个类级别的按钮并查看以从新表单中更新按钮的功能。

        try{
        LinearLayout layout = (LinearLayout) findViewById(R.id.contacteditll);
        LinearLayout layout2 = (LinearLayout) layout.findViewById(R.id.numbersll);

        LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        tempView = vi.inflate(R.layout.form, null);
        numberEntryViews.add(tempView);

        layout2.addView(tempView);
        btn = (ImageButton) tempView.findViewById(R.id.form_button);
        //TODO: Work from here. Ask on Stack Overflow.
        btn.setOnClickListener(this);
    }
    catch (Exception e)
    {
        e.printStackTrace();
        Log.d(TAG, "Failed to inflate");
    }

btn 是类级别,每次点击都会更新。从最后一个按钮中删除对我来说有意义的功能。

于 2011-06-29T09:42:44.143 回答