嘿,我无法声明,更改和使用全局变量。我尝试了整个“创建一个扩展应用程序并将变量放在那里的类”的东西,但我不确定如何实现它。这是我的班级中的变量。
public class MyApp extends Application {
public int listPos;
}
然后我尝试在这里访问和更改int listPos。
public class Browse extends ListActivity{
MyApp app = ((MyApp)getApplicationContext());
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String[] coffeeTypes = getResources().getStringArray(R.array.coffeeTypes);
setListAdapter(new ArrayAdapter<String>(this, R.layout.listview, coffeeTypes));
ListView lv = getListView();
lv.setTextFilterEnabled(true);
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
app.listPos = position;
startActivity(new Intent(Browse.this, CoffeeTypes.class));
}
});
}
}
然后我尝试访问以下活动中的变量以确定if else语句的结果
public class CoffeeTypes extends Activity{
MyApp app = ((MyApp)getApplicationContext());
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(app.listPos == 0){
Toast.makeText(this, "WEEEEEEE!0", Toast.LENGTH_LONG).show();
}
else if(app.listPos == 1){
Toast.makeText(this, "RAWR!1", Toast.LENGTH_LONG).show();
任何人都知道我做错了什么?
答案 0 :(得分:0)
我不确定它是否是Android操作系统的可见性问题,您是否能够创建一个可以充当变量的getter的公共函数?
int getListPos(){ return this.listpos; }
我知道您可以在上下文之间传递变量,您可能必须这样做。
也许一个让你移动的临时解决方法也可能是创建一个静态的可访问变量类?
答案 1 :(得分:0)
创建一个这样的类
class globalClass
{
static int lastPos;
}
您可以使用
设置值globalClass.lastPos = value;
并获取功能
int myVal = globalClass.lastPos;
答案 2 :(得分:0)
您可以使用soorya的答案进行一些修改。我个人仍然会使用你的myApp类,但将listPos更改为static并以这种方式访问它。通过这种方式,您可以使用Application类onCreate
方法在需要时初始化值(尽管在此示例中不需要)或其他Android方法。
public class MyApp extends Application {
public static int listPos;
}
//~~ Elsewhere:
MyApp.listPos = 5; //etc
但这不是解决问题类型的最佳方式。
您应该通过Intent
传递列表位置信息(或点击项目的ID,或者您正在处理数据)。
不要使用全局变量来跟踪此信息,而是将其保持在本地只有意图:
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
//app.listPos = position;
Intent intent = new Intent(Browse.this, CoffeeTypes.class);
intent.putExtra("position", position);
startActivity(intent);
//startActivity(new Intent(Browse.this, CoffeeTypes.class));
}
这会通过意图将位置数据传递给新的Activity。在您的CoffeeTypes活动中,您应该从以下内容开始:
//in onCreate...
int incomingPosition = getIntent().getIntExtra("position",-1));
if(incomingPosition != -1) { //do stuff }
这将从传入的Intent中读取“位置”数据,以便您可以使用它。如果没有添加任何内容,则上面的-1是默认值。
最后一个警告:您可能需要小心来回发送列表位置,具体取决于如果添加新项目/项目被删除,应用程序的设置方式,列表位置可能不再引用您认为的项目它做了。如果这些咖啡类型/您使用的任何咖啡都有一个单独的唯一ID,可能更适合避免上述情况,请考虑使用它。
答案 3 :(得分:0)
我通过将变量设为私有来执行应用程序变量类,然后创建公共get()和set()方法来更改变量。你可以尝试一下,但看起来你做得对,技术上
它可能出错的一个原因是因为你在onCreate而不是onStartCommand中实现这些东西。如果您使用错误的假设/活动周期知识测试此函数,则可能出错