findViewById 返回 null 里面运行的方法 ( android )

发布时间: 2017/3/19 14:00:02
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

出于一些原因的运行的方法有设置内容没有问题 view ,但当我试图检索 buttonxml 它返回 null,并不容许我设置 onclick listener。 我的代码如下所示在这里。

v.post(new Runnable() {
    @Override
    public void run() {
        setContentView(R.layout.win);
        Button submit = (Button) findViewById(R.id.submit);
        submit.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){
                HighScoresHelper scores = new HighScoresHelper("HighScoreV2.txt", GameActivity.this);
                scores.addScore("Test", Math.round((frame/FPS) *100)/100.0);
                startActivity(new Intent(GameActivity.this, HighScores.class));
                finish();
            }
        });
    }
});

和是、 拼写和一切是所有正确的匹配与 xml ,这里是 xml 代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:text="YOU WON!!!, enter in your name and click submit"
    android:id="@+id/textView3" />

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/name" />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Submit"
    android:id="@+id/submit"
    android:layout_gravity="center_horizontal" />
 </LinearLayout>

谢谢

解决方法 1:

所以,问题是我在向内部类的内部通话这 activity 。我需要做的是 inflate view 并将它保存为一个全局变量。所有的这里面的 onCreate 方法吗?

  LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            winView = inflater.inflate(R.layout.win, null);
            submit = (Button) winView.findViewById(R.id.submitScore);

            submit.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

然后在我内心的类的内部调用

v.post(new Runnable() {
                    @Override
                    public void run() {
                        setContentView(winView);
                    }
                });

若要更改 view 必要时,v 是主类的内部类实例变量。

只想澄清,主类-"GameActivity"和内部类被标记为"OurView"。v 是全局变量 type OurView 在 GameActivity 类的内部。我将张贴整个类,但其 300 + 长行。

赞助商