findViewById()返回null

时间:2013-05-20 20:07:04

标签: android android-preferences live-wallpaper

有几个问题已经在询问这个问题,但我找不到解决方案。我有一个LiveWallpaper,它使用自己的PreferenceFragment子类来指定首选项。最经常引用的解决方案是确保在setContentView()之前调用findViewByID()。我没有在所有中调用setContentView() ,因为我没有指定布局。这个应用程序最初使用不推荐的方法(如PreferenceActivity.getPreferenceManager())实现了首选项,并且没有使用布局,并且运行得很好。我正在尝试使用PreferenceFragment使代码更新。
我需要有一个布局,如果是这样的话,当我不想要一个时,我会有什么? 或者是否有另一种获取/设置视图的方法?

public class SetPreferenceActivity extends Activity {    
    private CheckBox redCheckBox;    

@Override  
protected void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  
    //setContentView(R.layout.main);  ???
    redCheckBox = (CheckBox)findViewById(R.id.redCheckBox);  // returns null
    getFragmentManager().beginTransaction().replace(android.R.id.content, new LiveWallpaperPreferenceFragment()).commit();  
    }  
}  

1 个答案:

答案 0 :(得分:1)

您可以动态创建视图:

@Override  
protected void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  

    TextView textView = new TextView(this);
    textView.setText("Hello");

    setContentView(textView);//<----set the view !

    }  
}