在两个活动之间传输数据

时间:2013-09-29 10:47:50

标签: android android-intent fragment

我想在两个活动之间发送数据,并根据数据显示一个视图(我有一个frameLayout,基于该数据我提交了一个填充frameLayout的片段)。我写这段代码,但我认为它不是在两个活动之间传输数据!因为总是0号!正在执行

问题是什么?

飞溅:

private OnClickListener onClickListener=new OnClickListener(){

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        Log.i("circuleProduct", "clicked");
        Intent intent;
        switch(v.getId()){
        case R.id.btnCircleProduct:
            intent=new Intent(Splash.this,MainActivity.class);
            startActivity(intent);
            intent.putExtra("value",1 );
            break;
        case R.id.btnCircleIntroduce:
            intent=new Intent(Splash.this,MainActivity.class);
            startActivity(intent);
            intent.putExtra("value", 2);
            break;
        case R.id.btnCircleContact:
            intent=new Intent(Splash.this,MainActivity.class);
            startActivity(intent);
            intent.putExtra("value", 3);
            break;
        case R.id.btnCircleMore:
            intent=new Intent(Splash.this,MainActivity.class);
            startActivity(intent);
            intent.putExtra("value", 4);
            break;
        }
    }

};

的活动:

 public class MainActivity extends FragmentActivity {
      @Override
public void onCreate(Bundle savedInstanceState) {

    FragmentManager fm=getSupportFragmentManager();
    FragmentTransaction ft=fm.beginTransaction();

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
     int value=0;
    Intent intent=getIntent();
    value=intent.getIntExtra("value", 0);

    switch(value){
    case 0:
        ft.add(R.id.frameLayout, new Introduce());
        ft.commit();
        break;
    case 1:
        ft.add(R.id.frameLayout, new Product());
        ft.commit();
    case 3:
        ft.add(R.id.frameLayout, new Contact());
        ft.commit();
    case 4:
        ft.add(R.id.frameLayout, new More());
        ft.commit();
        break;
    }
 }
}

5 个答案:

答案 0 :(得分:1)

尝试以这种方式使用两个活动之间的数据传输

 Intent i = new Intent(this, ActivityTwo.class);
  i.putExtra("Value1", 1);
  startActivity(i);

和oncreate()之后的其他活动

Bundle extras = getIntent().getExtras();
int value1 = extras.getint("Value1",0);

请参阅Android Intents

上的详细教程

答案 1 :(得分:1)

在startActivity之前添加额外内容

intent=new Intent(Splash.this,MainActivity.class);
intent.putExtra("value", 3);
startActivity(intent);

同样在case语句中给出break,在switch case语句中你缺少2

switch(value){
case 1:
    ft.add(R.id.frameLayout, new Introduce());
    ft.commit();
    break;
case 2:
    ft.add(R.id.frameLayout, new Product());
    ft.commit();
    break;
case 3:
    ft.add(R.id.frameLayout, new Contact());
    ft.commit();
    break;
case 4:
    ft.add(R.id.frameLayout, new More());
    ft.commit();
    break;
}

答案 2 :(得分:0)

在开始活动之前执行intent.putExtra("value", ...);

答案 3 :(得分:0)

这样做

intent.putExtra("value",1 );    
startActivity(intent);

而不是

startActivity(intent);    
intent.putExtra("value",1 );  

答案 4 :(得分:0)

在主要活动中你忘记了开关的中断。这意味着将多次调用commit。添加break到case1和case3。 并且在调用startactivity之前添加额外内容