将视图从一个活动传递到另一个活

时间:2011-12-20 10:13:14

标签: java android view android-activity graph

我正在尝试将视图从一个活动传递到另一个活动。

在我的第一项活动onButtonClick中,我使用Intent导航到另一项活动。

我在第一个活动中写了这一行setContentView(R.layout.main);,并宣布为graphView

现在的问题是,我想在第二个活动中填充graphView,但是它的引用,即第一个活动中存在mySimpleXYPlot = (XYPlot) findViewById(R.id.mySimpleXYPlot);

那么我怎样才能在第二次活动中获得mySimpleXYPlot

如果我使用

 setContentView(R.layout.main);
 mySimpleXYPlot = (XYPlot) findViewById(R.id.mySimpleXYPlot);

在第二个活动中,整个布局重新启动,我不想发生:(

任何帮助都将得到满足!

2 个答案:

答案 0 :(得分:1)

如果你想使用与public一起声明为static的同一个实例,那么你也可以在另一个类或活动中使用

编辑...

在活动1中,这样做

public class MyActivity1 extends Activity{
    public static XYPlot mySimpleXYPlot;

    public onCreated(Bundle b){
       setContentView(R.layout.main);
       mySimpleXYPlot = (XYPlot) findViewById(R.id.mySimpleXYPlot);
       // start you 2nd activity from button
    }
}

在Activity2中使用这种方式

public class MyActivity2 extends Activity{
    private XYPlot mySimpleXYPlot;
    public onCreated(Bundle b){
       setContentView(R.layout.main); 
       mySimpleXYPlot = MyActivity2.mySimpleXYPlot;
       // use mySimpleXYPlot as per your requirement
    }
}

我不确定这项工作是否完美,但请尝试这种方式并说出这个

会发生什么

<强> EDIT2

不要将您的组件添加到xml布局文件中添加oncreate time

我的布局文件看起来像这样

<?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:orientation="vertical"
   android:id="@+id/main_linear"
   >
  <Button android:id="@+id/btn1" android:text="Click" android:layout_width="wrap_content"
      android:layout_height="wrap_content" />
</LinearLayout>

我的第一个活动

    public static EditText edittext;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.test);
    //edittext = (EditText) findViewById(R.id.edittext);
    final LinearLayout ll = (LinearLayout) findViewById(R.id.main_linear);

    edittext = new EditText(getApplicationContext());
    edittext.setId(1);
    edittext.setText("text change");
    ((Button)findViewById(R.id.btn1)).setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            edittext.setText(edittext.getText().toString());
            ll.removeView(edittext);
            startActivity(new Intent(TestLinear.this,TestClass.class));
        }
    });
    ll.addView(edittext);
}

您需要先从已添加为子项的布局中删除该组件

    private static EditText edittext;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.test);
    LinearLayout ll = (LinearLayout) findViewById(R.id.main_linear);
    getEdit();
    ((Button)findViewById(R.id.btn1)).setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.v("test", edittext.getText().toString());
        }
    });
    ll.addView(edittext);
}
static void  getEdit(){
    edittext = TestLinear.edittext;
}

我知道这不是完美的方式。另一种方法是你可以将它的值存储在自定义类中,比如setter / getter,并在activity

中使用

答案 1 :(得分:0)

只需在第二个内容视图中添加相同的xml即可。如果您必须在多个视图中使用布局的特定部分,请将其放在单独的xml中并包含它。