findViewById在run方法(android)中返回null

时间:2016-11-30 16:18:17

标签: java android xml runnable

由于某种原因,这里的run方法没有设置内容视图的麻烦,但是当我尝试从xml中检索按钮时,它返回null并且不允许我设置onclick监听器。我的代码列在下面。

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 个答案:

答案 0 :(得分:0)

所以,问题是我在内部类中调用了这个活动。我需要做的是膨胀视图并将其保存为全局变量。我在onCreate方法中做了所有这些。

del type(x1).pi

然后在我的内部课程中我打电话给

  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是主类的内部类实例变量。

只是澄清一下,主要课程 - &#34; GameActivity&#34;并且内部阶级被标记为&#34; OurView&#34;。 v是GameActivity类中的全局变量类型OurView。我会发布整个课程,但它的长度超过300行。