Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 充气布局';s按钮onClick侦听器不工作_Java_Android_Onclick - Fatal编程技术网

Java 充气布局';s按钮onClick侦听器不工作

Java 充气布局';s按钮onClick侦听器不工作,java,android,onclick,Java,Android,Onclick,我所有其他的onClick方法都能工作,除了那些我必须膨胀布局才能得到按钮的方法!我做错了什么!下面是一些代码: package com.games.think; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import android.app.Activity; import

我所有其他的onClick方法都能工作,除了那些我必须膨胀布局才能得到按钮的方法!我做错了什么!下面是一些代码:

package com.games.think;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;

import android.widget.Button;
import android.widget.RadioButton;
import android.widget.TableLayout;

public class Think extends Activity{
    //What question are we on?
    int question = 1;
    //What level are we on?
    String lvl ="1";

    //Radio buttons we need to access them global
    RadioButton lvl1;
    RadioButton lvl2;
    RadioButton lvl3;
    RadioButton lvl4;
    RadioButton lvl5;

     /** Called when the activity is first created. */
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //play
        Button play = (Button)findViewById(R.id.play);
        play.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                playOnClick(v);

            }
        });
        //level
        Button level = (Button)findViewById(R.id.level);
        level.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                levelOnClick(v);

            }
        });

        //setLevel
        LayoutInflater  inflater = LayoutInflater.from(this);
        TableLayout tbl = new TableLayout(this);

        View playv = inflater.inflate(R.layout.level, null);
        Button updateLevel = (Button) playv.findViewById(R.id.updateLevel);
        tbl.addView(updateLevel);

        updateLevel.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    updateLevelOnClick(v);
                }
            });

        View levelv = inflater.inflate(R.layout.play, null);
        Button gotomenu = (Button) levelv.findViewById(R.id.tomenu);

        gotomenu.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    toMenuOnClick(v);
                }
            });





       //Radio Buttons
        lvl1 = (RadioButton) levelv.findViewById(R.id.lvl1);

        lvl2 = (RadioButton) levelv.findViewById(R.id.lvl2);

        lvl3 = (RadioButton) levelv.findViewById(R.id.lvl3);

        lvl4 = (RadioButton) levelv.findViewById(R.id.lvl4);

        lvl5 = (RadioButton) levelv.findViewById(R.id.lvl5);
       //tomenu


        lvl = getLevel();


        if(lvl.equals("-1")) {
            lvl=getLevel();

        }






    }




    protected void toMenuOnClick(View v) {
        setContentView(R.layout.main);

    }




    protected void updateLevelOnClick(View v) {

        setContentView(R.layout.main);


    }




    protected void levelOnClick(View v) {
        setContentView(R.layout.level);


        if(lvl.equals("1")) {
            lvl1.setChecked(true);
        }
        if(lvl.equals("2")) {
            lvl2.setChecked(true);
        }
        if(lvl.equals("3")) {
            lvl3.setChecked(true);
        }
        if(lvl.equals("4")) {
            lvl4.setChecked(true);
        }
        if(lvl.equals("5")) {
            lvl5.setChecked(true);
        }

    }




    protected void playOnClick(View v) {
        setContentView(R.layout.play);


        setQuestion();


    }






    private String getLevel() {

        String FILENAME = "think_level";
        FileInputStream fis;
        byte[] buffer = new byte[1000];


        try {
            fis = openFileInput(FILENAME);
        } catch (FileNotFoundException e) {
            setLevel("1");
            return "-1";
        }

        try {
            fis.read(buffer,0,1000);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            fis.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        String level = buffer.toString();

        return level;
    }

    private void setLevel(String _level) {
        String FILENAME = "think_level";
        String level = _level;

        FileOutputStream fos;
        try {
            fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
            fos.write(level.getBytes());
            fos.close();
        } catch (Exception e) {

            e.printStackTrace();

        }

    }

    private void setQuestion() {




    }



    }
以下是我的xml文件: Main.xml:

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

    <TableLayout android:id="@+id/tableLayout1" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android">
        <ImageView android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/imageView1" android:src="@drawable/think" android:scaleType="fitCenter"></ImageView>
        <Button android:id="@+id/play" android:text="Play" android:layout_height="wrap_content" android:layout_width="wrap_content" ></Button>
        <Button android:text="Level" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/level"></Button>


    </TableLayout>

这是我的level.xml

<?xml version="1.0" encoding="utf-8"?>
    <TableLayout android:id="@+id/tableLayout1" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android">
        <TableRow android:id="@+id/tableRow1" android:layout_width="wrap_content" android:layout_height="wrap_content">
            <TextView android:text="Level:" android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
        </TableRow>
        <TableRow android:id="@+id/tableRow2" android:layout_width="wrap_content" android:layout_height="wrap_content">
            <RadioGroup android:id="@+id/radioGroup1" android:layout_width="wrap_content" android:layout_height="wrap_content">
                <RadioButton android:id="@+id/lvl1" android:text="Level 1" android:layout_height="wrap_content" android:checked="true" android:layout_width="wrap_content"></RadioButton>
                <RadioButton android:id="@+id/lvl2" android:text="Level 2" android:layout_height="wrap_content" android:layout_width="wrap_content"></RadioButton>
                <RadioButton android:id="@+id/lvl3" android:text="Level 3" android:layout_height="wrap_content" android:layout_width="wrap_content"></RadioButton>
                <RadioButton android:id="@+id/lvl4" android:text="Level 4" android:layout_height="wrap_content" android:layout_width="wrap_content"></RadioButton>
                <RadioButton android:id="@+id/lvl5" android:text="Level 5" android:layout_height="wrap_content" android:layout_width="wrap_content"></RadioButton>
            </RadioGroup>
        </TableRow>
        <Button android:text="Set Level" android:id="@+id/updateLevel" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
    </TableLayout>

下面是play.xml:

<?xml version="1.0" encoding="utf-8"?>
<TableLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">
    <ScrollView android:id="@+id/scrollView1" android:layout_width="wrap_content" android:layout_height="wrap_content">
        <TextView android:text="TextView" android:id="@+id/question" android:layout_height="wrap_content" android:layout_width="wrap_content"></TextView>
    </ScrollView>
    <RadioGroup android:id="@+id/radioGroup1" android:layout_width="wrap_content" android:layout_height="wrap_content" >
        <RadioButton android:id="@+id/radioButton1" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="RadioButton"></RadioButton>
        <RadioButton android:id="@+id/radioButton2" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="RadioButton"></RadioButton>
        <RadioButton android:id="@+id/radioButton3" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="RadioButton"></RadioButton>
    </RadioGroup>
    <Button android:id="@+id/go" android:text="Go" android:layout_height="wrap_content" android:layout_width="wrap_content"></Button>
    <Button android:id="@+id/tomenu" android:text="Back To Menu" android:layout_height="wrap_content" android:layout_width="wrap_content"></Button>
</TableLayout>

没有明显的理由说明这不起作用

任何运行时创建的视图都必须添加到linearlayout(或任何其他父布局)中 使用:


您是否在xml文件的任何线性布局中使用过此按钮,即当您到达相应的活动时,这些按钮是否会出现

问题在于您添加的视图没有父视图,因此无法接收单击事件。当前,您正在使用

View playv = inflater.inflate(R.layout.level, null);
您需要在第二个参数中放置父视图

View playv = inflater.inflate(R.layout.level, parentView, false);

这将允许您使用父视图,但不实际附加它

因此按钮位于关卡和播放版面中,您正在放大这些版面,但看起来您从未将版面添加到主视图/版面中。你真的能看到你正在膨胀的那两个布局吗

您应该在
tbl.addView(updateLevel)中看到异常,因为您正在尝试添加已指定其父级的视图


您没有看到此异常吗?

膨胀是异步方法,您可以尝试在其膨胀后添加单击侦听器吗

    //only inflate in oncreate / onresume
    inflater.inflate(
            R.layout.play,  // resource
            this,                // root
            true); //attach to root

 //overide onFinishInflate and get the view here
    protected void onFinishInflate() {
     super.onFinishInflate();
     Button gotomenu = (Button) levelv.findViewById(R.id.tomenu);

     gotomenu.setOnClickListener(new View.OnClickListener() {
         @Override
          public void onClick(View v) {
             toMenuOnClick(v);
           }
         });
     }

如果您想在项目上显示项目值,请单击仅使用.setTag(某些值)getTag()

RelativeLayout firstContactRlayout = (RelativeLayout) myLayout.findViewById(R.id.firstContactRlayout);
    firstContactRlayout.setTag(number);
    firstContactRlayout.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String gettags = (String) v.getTag();
            Log.e("gettags", "--" + gettags);
        }
    });

tbl.addView(updateLevel)之后尝试此操作0的
tbl.getChildAt(0)
可能会更改:

tbl.getChildAt(0).findViewById(R.id.updateLevel).setOnClickListener( new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        updateLevelOnClick(v);
    }
});

确实要将按钮添加到屏幕上吗?它们不在main.xml布局上,而是在其他布局上。是的,我确信它们在屏幕上,因为我可以访问level.xml和play.xml屏幕,但不能返回,因为onclick侦听器不工作。此外,我没有理解您所说的“我可以访问level.xml和play.xml屏幕”。我以为你是在用这些XML给按钮充气。那么,您是否也在其他活动中使用这些按钮呢?layout level.xml和play.xml实际上是具有父按钮的布局,和图像。我应该从level.xml文件中获取主视图组并添加主视图组作为第二个参数吗?您将使用要添加膨胀视图的任何视图。@BrianGriffey如何添加父视图?在我的main.xml布局中,我有两个按钮play和level!当我单击play时,它会将我带到play.xml,我会看到所有的东西都很好,级别按钮也一样。但是onclick侦听器不工作我该怎么解决这个问题?好的。。。您确定setLevelOnClick和toMenuOnClick函数没有问题吗?你能为它们发布代码吗?可能是因为你已经在R.layout.main上调用过一次setContentView,第二次调用它没有任何作用,因为布局已经膨胀了。您是否尝试在函数中添加一些日志以查看是否进入了它?请检查您发布的代码,我使用了相同的代码,我看到了此异常。
tbl.getChildAt(0).findViewById(R.id.updateLevel).setOnClickListener( new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        updateLevelOnClick(v);
    }
});