我通过互联网查看了很多android教程.在这些教程中,他们this在各处使用上下文.我知道thisJava中的关键字意味着什么,但我不能this在Android编程中使用关键字.例如,在AlertDialog.Builderdeveloper.android.com网站上,在Context的参数中只有一个引用,但我不知道这this意味着什么.
我正在阅读此链接以了解android中的上下文.我还有一个问题,每个活动都有自己的背景吗?请考虑我是初级水平的机器人学习者.
我看到一些代码class_name.this用作其上下文的参数,有时this直接在另一个演示代码中使用.我可以假设这this是一个缩写class_name.this吗?
我有一个BaseActivity类,可以在其他活动中进行扩展。我在底部有一个菜单,其中包含5个按钮。当前,每当单击菜单按钮时,我都会使用setOnClickListener,并且在每个活动中都重复了代码。显然,这不是一个好习惯。如果我必须进行一些小的更改,则必须在每项活动中进行编辑,而这会变得很麻烦。因此,我试图通过在BaseActivity中放置不同的方法并在xml onClick中调用该方法来对其进行优化。
下面的代码说我目前在MainActivity.this上,它将打开FindActivity.class。如果代码在MainActivity类中,则可以使用以下代码
Public Class MainActivity extends BaseActivity{
Intent intent = new Intent(MainActivity.this, FindActivity.class);
startActivity(intent);
}
Run Code Online (Sandbox Code Playgroud)
但是我想要达到的目的是在BaseActivity中拥有以上代码,而该代码显然将由MainActivity进行扩展。
Public Class BaseActivity extends ActionBarActivity{
Intent intent = new Intent("This should be MainActivity.class", FindActivity.class);
startActivity(intent);
}
Run Code Online (Sandbox Code Playgroud)
现在,这里的问题是我不确定在使用MainActivity时如何在BaseActivity的Intent参数中获取MainActivity.this。基本上我不确定如何获得上下文。
任何帮助将不胜感激。
如果以上不清楚,请告诉我,需要更多说明。
提前致谢。
performance android android-intent android-layout android-activity
我不认为它非常适合this用作类参数,因为如果对象的初始化顺序不正确,可能会出现错误.
什么是避免这种情况的最佳做法?
例:
public class Game{
private Player p1, p2, currentPlayer;
private Board board;
Game() {
board = new Board(this);
}
private boolean hasFieldsToBeClicked() {
return board.checkFieldsToBeClicked();
}
Run Code Online (Sandbox Code Playgroud) 每个Activity都是一个Context.每个View都需要一个Context.是否正确地说当我们将Context传递给View时,我们基本上是通过传递Context来向某个Activity添加一个View?
我正在尝试Activity从ListViewAndroid中的自定义适配器启动.我正在声明上下文,但Logcat显示找不到Context.我在这里上传我的代码
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// convert view = design
View v = convertView;
//context = this;
if (v == null) {
holder = new ViewHolder();
holder = new ViewHolder();
v = vi.inflate(Resource, null);
holder.imageview = (ImageView) v.findViewById(R.id.ivImage);
holder.tvName = (TextView) v.findViewById(R.id.tvName);
holder.tvDescription = (TextView) v.findViewById(R.id.tvDescriptionn);
holder.tvDOB = (TextView) v.findViewById(R.id.tvDateOfBirth);
holder.tvCountry = (TextView) v.findViewById(R.id.tvCountry);
holder.tvHeight = (TextView) v.findViewById(R.id.tvHeight);
holder.tvSpouse = (TextView) v.findViewById(R.id.tvSpouse);
holder.tvChildren = (TextView) v.findViewById(R.id.tvChildren);
v.setTag(holder);
} else …Run Code Online (Sandbox Code Playgroud) 这是save()我的应用程序中的方法:
public void save() {
Context context;
SharedPreferences sp = context.getSharedPreferences("gameSave",
Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putInt("X", player.getX());
editor.putInt("Y", player.getY());
editor.putInt("level", player.getLevel());
editor.putFloat("xp", player.getXp());
editor.commit();
}
Run Code Online (Sandbox Code Playgroud)
我一直试图让它工作一段时间,但这getSharedPreferences (String name, int mode)对我来说并没有起作用.它不会出现在它自己的context.getSharedPreferences()工作上,但是NullPointerException由于我的背景,我认为这会产生一个.我已经尝试save(Context context){}过构造函数,但是从该方法内部声明的上下文的另一个方法调用它也不起作用.我看了很多例子,但没有一个能为我效劳.那我怎么getSharedPreferences()去上班?
编辑:我有一个类GameScreen和一个类SaveManager.当我在Gamescreen中保存时,这是我使用的代码:
Savemanager savemanager;
savemanager.save();
state = GameState.Running;
Run Code Online (Sandbox Code Playgroud)
我有我的类SaveManager:
package com.package.game;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
public class SaveManager extends Activity {
private Player player = GameScreen.getPlayer();
public void save() {
SharedPreferences sp = getSharedPreferences("gameSave", …Run Code Online (Sandbox Code Playgroud)