如何在ViewGroup中向新活动添加视图

时间:2012-08-22 18:13:04

标签: android button view android-activity viewgroup

好吧所以我试图将一个按钮/视图添加到ViewGroup已经存在的新活动之外。 这是我目前的代码:

的Src:

public class Main extends Activity {
    Button btn, btn1;
    LayoutInflater linflater;
    LinearLayout l;
    static int pos = 0;

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

        Button  ButtonBack = (Button) findViewById(R.id.dynamicoption);
        ButtonBack.setOnClickListener(new View.OnClickListener(){

              public void onClick(View v) {
                  // Perform action on click

                startActivity(new Intent("com.nour.ImamKhomeini.DYNAMICOPTION"));


              }

          });

        btn = (Button) findViewById(R.id.Button01);

        l = (LinearLayout) findViewById(R.id.LinearLayout01);
        linflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        btn.setOnClickListener(new OnClickListener() {
          @Override
          public void onClick(View v) {
              View myView = linflater.inflate(R.layout.dynamicoption, l, true);
              myView.setId(pos);
              pos++;
          }
        });

        btn = (Button) findViewById(R.id.Button01);
        btn1 = (Button) findViewById(R.id.Button02);
        l = (LinearLayout) findViewById(R.id.LinearLayout01);
        linflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        btn.setOnClickListener(new myListener());
        btn1.setOnClickListener(new myListener1());
    }

    class myListener implements View.OnClickListener {
        @Override
        public void onClick(View v) {
            View myView = linflater.inflate(R.layout.dynamicoption, null);
            myView.setId(pos);
            pos++;
            l.addView(myView);
        }
    }

    class myListener1 implements View.OnClickListener {
        @Override
        public void onClick(View v) {
            if (pos != 0) {
                pos--;
                View myView = l.findViewById(pos);
                l.removeView(myView);
            }
        }
    }
}

这是我的xmls:

主:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" android:layout_height="fill_parent"
    android:orientation="horizontal">

    <Button android:id="@+id/Button01" android:background="@drawable/ic_launcher"
        android:layout_height="45dip" android:layout_width="45dip"></Button>

    <Button android:id="@+id/Button02" android:background="@drawable/ic_launcher"
        android:layout_height="45dip" android:layout_width="45dip"></Button>

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

dynamicoption.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content" android:layout_height="wrap_content"
    android:orientation="horizontal">
    <EditText android:text="@+id/EditText01" android:id="@+id/EditText01"
        android:layout_width="wrap_content" android:layout_height="wrap_content"></EditText>
    <Button android:text="@+id/Button01" android:id="@+id/Button01"
        android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
</LinearLayout>

感谢任何帮助。 谢谢。

1 个答案:

答案 0 :(得分:1)

我会做一些改变。看看我如何创建OnClickListener,您不需要创建新的子类。并注意我如何使用布局inflater:

btn.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        View myView = linflater.inflate(R.layout.dynamicoption, l, true);
        myView.setId(pos);
        pos++;
    }
});

当XML打开和关闭标记之间没有任何内容时:

<EditText 
    android:id="@+id/EditText01"
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"
    android:text="@+id/EditText01" ></EditText>

您可以使用/>简写并为自己节省一些打字

<EditText 
    android:id="@+id/EditText01"
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"
    android:text="@+id/EditText01" />

这是你的onCreate()方法的样子:

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

    Button ButtonBack = (Button) findViewById(R.id.dynamicoption);
    ButtonBack.setOnClickListener(new View.OnClickListener(){
        public void onClick(View v) {
            // Perform action on click
            startActivity(new Intent("com.nour.ImamKhomeini.DYNAMICOPTION"));
        }
    });

    l = (LinearLayout) findViewById(R.id.LinearLayout01);
    linflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    btn = (Button) findViewById(R.id.Button01);
    btn.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            View myView = linflater.inflate(R.layout.dynamicoption, l, true);
            myView.setId(pos);
            pos++;
        }
    });

    btn1 = (Button) findViewById(R.id.Button02);
    btn1.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            if (pos > 0) {
                pos--;
                l.removeView(l.findViewById(pos));
            }
        }
    });
}