我可以在Activity中使用公共静态对象作为共享var吗?

时间:2013-11-16 08:58:52

标签: android

我想填写对象myRule的所有属性,基于类MRule,我创建了几个活动来做到这一点, 一个Activity传递名称并启用,一个Activity传递onlyNumberList,exceptNumberList等... 并使用Back和Next按钮切换不同的Activity。

因为Intent.putExtra无法传递对象,所以我打算创建一个公共静态对象staticMRule作为与活动之间的共享var,是否可以?

并且,有更好的方法吗?

Public static  MRule  staticMRule; 



public class MRule {
    public int ruleID;
    public String name;
    public Boolean enabled;
    public IncomingType incomingType;
    public List<String> onlyNumberList;
    public List<String> exceptNumberList;
    public List<String> receiverNumberList;  //短信转发到的号码

    public MRule(){ 
        onlyNumberList=new ArrayList<String>();
        exceptNumberList=new ArrayList<String>();
        receiverNumberList=new ArrayList<String>();
    }   
}


public class activity1  extends Activity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity1);       

        Button btnNext = (Button) findViewById(R.id.btnClose);
        btnNext.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                  staticMRule.name="a"; 
            }
        }); 

    }
}

public class activity2  extends Activity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity2);       

        Button btnNext = (Button) findViewById(R.id.btnClose);
        btnNext.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                  staticMRule.enabled=false;
            }
        }); 

    }
}

3 个答案:

答案 0 :(得分:1)

申请类

Application类是可以维护全局变量的基类。可以通过从它扩展自己的类并在AndroidManifest.xml的标记中指定该类来覆盖Application类。

应用程序生命周期中存在

Application类。创建静态单例可以达到目的,而不是扩展和重写Application类。

以下代码可以使用

public class YourApplication extends Application 
{     
     private int result = 0;

     public int getResult() {
          return result;
     }

     public void setResult(int result) {
         this.result= result;
     }
}

要访问它,

YourApplication app = ((YourApplication)this.getApplication());
app.setResult(100);
//...
int result = app.getResult();

<强>参考

答案 1 :(得分:0)

你可以创建实现parcelable的类,然后你可以使用Intent.putExtra(key,ObjOfYourParcelableClass)轻松传递该类的Object

答案 2 :(得分:0)

更优雅的另一个选择是使用带单例的注入框架。请查看RoboGuiceDagger