Android片段忽略按钮单击

时间:2015-03-19 18:27:02

标签: android android-fragments android-button


我在片段里面有一个按钮。如果我点击那个按钮就没有任何反应。我遵循了几个教程,基本上每个人都做我做的事情。在我几周前开发的另一个应用程序中,我做了同样的事情并且它有效......我做错了什么?
提前感谢所有提示!

片段类

package com.geko;

import com.geko.R;

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageInstaller.Session;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;

public class Lev1 extends Fragment implements OnClickListener {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){

    View v = inflater.inflate(R.layout.lev1, container, false);

    Button button1= (Button) v.findViewById(R.id.level1);
    button1.setOnClickListener(this);   

    return v;        
}

@Override
public void onClick(View v) {

    Context context = getActivity();

    Toast.makeText(context, "Pressed!",
             Toast.LENGTH_SHORT).show();
} 
}

片段XML

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout

    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <Button
        android:id="@+id/level1"

        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_margin="8dp"
        android:text="livello1"
         />

</LinearLayout>

6 个答案:

答案 0 :(得分:1)

这是因为您使用了错误的上下文。

button1.setOnClickListener({
    public void onClick(View v) {
        Context context = getActivity();
        Toast.makeText(context, "Pressed!", Toast.LENGTH_SHORT).show();
    } 
});

编辑:从导入中删除import com.geko.R;

答案 1 :(得分:1)

替换此行

Context context = this.getActivity().getApplicationContext();

Context context = getActivity();

答案 2 :(得分:1)

如果您没有解决按钮点击问题,可以尝试其中任何一种解决方法。

A)

    Button button1= (Button) v.findViewById(R.id.level1);
    button1.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

        }
    });

B)

<Button
    android:id="@+id/level1"

    android:layout_width="300dp"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_margin="8dp"
    android:onClick="yourNewMethod"
    android:text="livello1"
     />

然后在java上

public void yourNewMethod(View v){
     //Whatever you need to do
 }

答案 3 :(得分:1)

在更高级别的访问权限上声明您的按钮。在您的代码中,按钮对象超出范围,不再位于托管内存中。 示例代码:

public class Lev1 extends Fragment implements OnClickListener {

Button button1;
...
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){

...
    button1= (Button) v.findViewById(R.id.level1);
    button1.setOnClickListener(this); 

有趣的说明:如果您使用嵌套类方法,如某些建议,那么按钮对象的范围不是问题。但我确实喜欢使用 implements OnClickListener 的代码,它使代码看起来更干净。

答案 4 :(得分:0)

onClick方法中进行一点改动:

    @Override
    public void onClick(View v) {
        switch(v.getId()){
            case R.id.level1:
                 Toast.makeText(getActivity(), "Pressed!",
                     Toast.LENGTH_SHORT).show();
            break;
        }
    } 

答案 5 :(得分:0)

监听/捕获点击事件的方法很少。我怀疑在这个项目中你的活动存在冲突。通过引用查看或按钮(具体)来确保上下文是点击按钮,如下所示:

public class Lev1 extends Fragment implements View.OnClickListener {
...

public class Lev1 extends Fragment implements Button.OnClickListener {
...

在此Java文件中发布您的导入。