在按钮上添加动态元素到xml单击android

时间:2014-04-05 17:30:00

标签: android xml

我试图在点击按钮时动态地将元素添加到现有的xml布局中。根据用户单击按钮的次数,应将多个项目添加到现有xml中。我认为使用布局inflater是一种很好的技术,但我无法做到。任何帮助将不胜感激。

谢谢!这是我的代码:

main.xml中:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/main_layout_id">
</LinearLayout>

layout_item.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/layout_item_id">

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />
</LinearLayout>

java文件:

public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    final LinearLayout mainLayout = (LinearLayout)findViewById(R.id.main_layout_id);

    View view = getLayoutInflater().inflate(R.layout.layout_item, mainLayout,false);

    mainLayout.addView(view);

    Button b=(Button) findViewById(R.id.button1);
    b.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Context c=getApplicationContext();
            TextView tvv=new TextView(c);
            tvv.setText("textview");
            mainLayout.addView(tvv);
        }
    }); 
}

1 个答案:

答案 0 :(得分:1)

按钮属于layout_item.xml

所以改变这个

 Button b=(Button) findViewById(R.id.button1);

 Button b=(Button) view.findViewById(R.id.button1);

您应该使用活动上下文

Context c=ActivityName.this;

示例:

public class MainActivity extends Activity {
    Fragment fr; 
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final LinearLayout mainLayout = (LinearLayout)findViewById(R.id.main_layout_id);

        View view = getLayoutInflater().inflate(R.layout.layout_item, mainLayout,false);

        mainLayout.addView(view);
        final LinearLayout ll = (LinearLayout)view.findViewById(R.id.ll);
        Button b=(Button) view.findViewById(R.id.button1);
        b.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Context c=MainActivity.this;
                TextView tvv=new TextView(c);
                tvv.setText("textview");
                ll.addView(tvv);
            }
        }); 
    }
}

layout_item.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout_item_id"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

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

</LinearLayout>

卡扣

enter image description here