1

我是android新手,非常感谢任何帮助。我正在尝试使用背景作为我的视图,并假设我想创建一个简单的 Credits 页面,其中包含以下文件: credits.xml Credits.java

学分.java:

public class Credits extends Activity implements OnTouchListener
{   
    private FrameLayout fl;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            fl = (FrameLayout)findViewById(R.id.credits_screen);
            if ( fl == null ) Log.e("Credits", "fl is null");
            else {
                  fl.setOnTouchListener(this);
                  setContentView(fl);
            }
    }
    @Override 
    public boolean onTouch(View v, MotionEvent event) {
        return true;
    }
}

在我的 credits.xml 中,我有:

<?xml version="1.0" encoding="utf-8"?>

<FrameLayout  xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent" android:layout_height="fill_parent"
 android:focusable="true" android:id="@+id/credits_screen">

<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:src="@drawable/credits" android:scaleType="fitXY" />

</FrameLayout>

显然,fl 在 (FrameLayout)findViewById() 处返回 null。虽然我看到 R.id.credits_screen 是在 R 文件中生成的。我可以知道我的代码有什么问题吗?为什么它无法找到 FrameLayout?

4

1 回答 1

3

您需要在 findViewById() 之前调用 setContentView()。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.credits);
    fl = (FrameLayout) findViewById(R.id.credits_screen);
    fl.setOnTouchListener(this);
}
于 2013-01-24T21:30:13.623 回答