zoukankan      html  css  js  c++  java
  • 继承Application实现Android数据共享

         Application类


        在Android中,启动一个应用,首先会初始化Application,然后再通过它检查AndroidManifest.xml清单文件,选择须要首先启动的Activity。


        在Activity中能够使用getApplication()方法获得该Application的实例,使用它就能够获得当前应用的主题、资源文件里的内容等,而且我们能够通过它来加入自己的全局属性,如User。比如开发一个游戏,须要保存分数,那么我们就能够继承Application。

     

            首先,先写个Application的子类:

    import android.app.Application;
    public class GameApplication extends Application {
        private int score;
        public int getScore() {
            return score;
        }
        public void setScore(int score) {
            this.score = score;
        }
    }


          然后在manifest.xml文件里面改动

    <application android:name=".GameApplication" android:icon="@drawable/icon" android:label="@string/app_name">
            <activity android:name=".DemoActivity"
                      android:label="@string/app_name">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <activity android:name="ResultActivity"></activity>
        </application>

          注意到加入了android:name=".GameApplication" 。

     

          改动完了以后,再往下看

    public class DemoActivity extends Activity {
        public Button button;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);     
            button=(Button)findViewById(R.id.button);
            ((GameApplication)getApplication()).setScore(100);
            button.setOnClickListener(new View.OnClickListener() {			
    			public void onClick(View v) {
    				Intent intent=new Intent();
    				intent.setClass(DemoActivity.this, ResultActivity.class);
    				startActivity(intent);
    			}
    		});
        }
    }

          在这个activity里面设置了分数,我们能够在别的activity里面取出来:

    public class ResultActivity extends Activity {
           @Override
        protected void onCreate(Bundle savedInstanceState) {
        	// TODO Auto-generated method stub
        	super.onCreate(savedInstanceState);
        	setContentView(R.layout.other);
        	TextView tv=(TextView)findViewById(R.id.tv);
        	int score=((GameApplication)getApplicationContext()).getScore();
        	tv.setText("你的成绩是:"+score);
        }
    }

            这仅仅是个简单的样例,当然,想要完毕以上功能,使用intent传值就能够了,这样还显得麻烦,可是,假设有非常多activity,使用这样的方法就会发现非常实用,是不是使用sharepreference也能够完毕类似功能呢,能够,可是,效率方面就要比这个差非常多了,sharepreference主要是用来存储数据,你能够退出程序时把所须要保存的简单数据保存到sharepreference里面,当然复杂的数据,还得使用sqllite。

     

     

  • 相关阅读:
    C++中整型变量的存储大小和范围
    A1038 Recover the Smallest Number (30 分)
    A1067 Sort with Swap(0, i) (25 分)
    A1037 Magic Coupon (25 分)
    A1033 To Fill or Not to Fill (25 分)
    A1070 Mooncake (25 分)
    js 获取控件
    C#代码对SQL数据库添加表或者视图
    JS 动态操作表格
    jQuery取得下拉框选择的文本与值
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4329745.html
Copyright © 2011-2022 走看看