在android中添加onCreate之外的视图

时间:2014-08-07 13:15:45

标签: android

如何在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);
        }
    }
}

提前致谢

2 个答案:

答案 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();
        }
    }
}