and*_*irl 61 android background class android-context
在我的应用程序中,我有很多课程和活动.Droid是一个没有上下文的类.Mygame是一个扩展SurfaceView并实现SurfaceHolder.Callback的类.我在mygame类中创建了一个Droid对象,并为它设置了背景图像和位置.我为此编写的代码如下.
block1 = new Droid(BitmapFactory.decodeResource(getResources(), R.drawable.birdpic), 100, 10);
Run Code Online (Sandbox Code Playgroud)
Droid类的构造函数如下.
public Droid(Bitmap bitmap, int x, int y) {
this.bitmap = bitmap;
this.x = x;
this.y = y;
}
Run Code Online (Sandbox Code Playgroud)
在一个特定的场景中,我必须从Droid类本身设置Droid对象的背景图像和位置.我正面临着这个问题.下面给出的是执行此操作的代码片段.
if(checkflag)
{
myObj.centerblock=new Droid(BitmapFactory.decodeResource(getResources(), R.drawable.blast), myObj.xpos, myObj.ypos);
}
Run Code Online (Sandbox Code Playgroud)
问题是Droid类没有上下文.所以我不能在这里使用getResources().我已经尝试了下面的代码,但它崩溃了.
if(checkflag)
{
myObj.centerblock=new Droid(BitmapFactory.decodeResource(myObj.getResources(), R.drawable.blast), myObj.xpos, myObj.ypos);
}
Run Code Online (Sandbox Code Playgroud)
有谁能够帮我.我只想设置背景图像并将其放置在Droid类本身的Droid对象中.
Ali*_*Ali 55
Context是系统的句柄; 它提供诸如解析资源,获取对数据库和首选项的访问等服务.它是一个"接口",允许访问应用程序特定的资源以及有关应用程序环境的类和信息.您的活动和服务还会将Context扩展为继承所有这些方法以访问运行应用程序的环境信息.
这意味着如果要获取/修改有关资源的某些特定信息,则必须将上下文传递给特定类.你可以在构造函数中传递上下文
public classname(Context context, String s1)
{
...
}
Run Code Online (Sandbox Code Playgroud)
zee*_*ker 29
对此的常规解决方案是在创建时将上下文的实例传递给类,或者在首次创建之后但在需要使用上下文之前将其传递给类.
另一个解决方案是使用静态方法创建一个Application对象来访问应用程序上下文,尽管它将Droid对象紧密地耦合到代码中.
编辑,添加了示例
要么将Droid类修改为这样的东西
public Droid(Context context,int x, int y) {
this.bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.birdpic);
this.x = x;
this.y = y;
}
Run Code Online (Sandbox Code Playgroud)
或者像这样创建一个应用程序:
public class App extends android.app.Application
{
private static App mApp = null;
/* (non-Javadoc)
* @see android.app.Application#onCreate()
*/
@Override
public void onCreate()
{
super.onCreate();
mApp = this;
}
public static Context context()
{
return mApp.getApplicationContext();
}
}
Run Code Online (Sandbox Code Playgroud)
并且在需要上下文的地方调用App.context() - 但是请注意,并非所有函数都在应用程序上下文中可用,有些仅在活动上下文中可用,但它肯定会满足您对getResources()的需求.
请注意,您需要在清单中的应用程序定义中添加android:name,如下所示:
<application
android:icon="@drawable/icon"
android:label="@string/app_name"
android:name=".App" >
Run Code Online (Sandbox Code Playgroud)
小智 25
示例:获取app_name字符串:
Resources.getSystem().getString( R.string.app_name )
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
102733 次 |
最近记录: |