如何在Android中的onCreate()
之外添加查看功能?
我的MainActivity.java
public class Main extends Activity {
static RelativeLayout mainRel;
static LinearLayout ll;
static TextView title;
static Context context;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
RelativeLayout mainRel=(RelativeLayout) findViewById(R.id.mainRel);
}
public static void refresh(){
LinearLayout ll = new LinearLayout(this); // actually "this" just works in onCreate;
TextView title = new TextView(this);// actually "this" just works in onCreate;
ll.setOrientation(LinearLayout.HORIZONTAL);
ll.addView(title);
title.setText("TV");
mainRel.addView(ll);
}
}
}
提前致谢
答案 0 :(得分:2)
通常,在static
方法中不会执行与UI相关的操作。如果您删除static
关键字,则this
指针即使在onCreate()
之外也可以使用。
如果您坚持保留static
关键字(因为您需要该方法是静态的),那么您应该将Context
参数传递给该方法,方法是将其更改为refresh(Context context)
编辑:如果您需要从其他类调用此方法,您可能需要创建对Main
活动的引用并将其传递给其他类,然后调用{{ 1}}
答案 1 :(得分:0)
调用静态方法真是个坏主意。
相反,您可以在构造函数中为Activity
提供AsyncTask
的引用。然后从AsyncTask#onPostExecute()调用非静态refresh()
方法。
在AsyncTask中存储对Activity的引用时,请使用WeakReference。如果您的活动在后台任务正在运行时被销毁,它将无法保留在内存中直到后台结束。
public class YourAsyncTask extends AsyncTask<Void, Void, Void> {
private WeakRefrence<Main> mainRef;
public YourAsyncTask(Main activity) {
mainRef = new WeakReference<Main>(activity);
}
protected void onPostExecute(Void result) {
Main main = mainRef.get();
if (main != null) {
main.refresh();
}
}
}