onClick(查看v)无法识别

时间:2014-05-30 08:16:20

标签: android

此片段用于了解片段的工作原理。但是,错误消息"类型ImageFragment必须实现继承的抽象方法View.OnClickListener.onClick(View)。

为什么没有看到onClick方法?怎么能纠正呢?

package com.example.fragmenttest170511;


import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout; 
import android.view.View.OnClickListener;


public class ImageFragment extends Fragment implements View.OnClickListener{

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle       savedInstanceState)
    {
        final LinearLayout layout = new LinearLayout(getActivity());
        layout.setOrientation(LinearLayout.HORIZONTAL);
        Button btnGreen = new Button(getActivity());
        layout.addView(btnGreen);
        btnGreen.setOnClickListener(new OnClickListener() {
    @Override
        public void onClick(View v) {}

    });


        return layout;
    }   
}

1 个答案:

答案 0 :(得分:2)

这是因为你的onClick()方法实际上并不在你的ImageFragment类中,而是在为Button的OnClickListener定义的匿名内部类中。

将方法移到Listener赋值之外,并将其放在ImageFragment类中,如下所示:

public class ImageFragment extends Fragment implements View.OnClickListener{

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle       savedInstanceState)
    {
        final LinearLayout layout = new LinearLayout(getActivity());
        layout.setOrientation(LinearLayout.HORIZONTAL);
        Button btnGreen = new Button(getActivity());
        layout.addView(btnGreen);
        btnGreen.setOnClickListener(this);
        return layout;
    }   

    @Override
    public void onClick(View v) {
        // handle clicks here
    }
}

或者从类声明中删除implements View.OnClickListener并使用您当前的匿名内部类的实现。

就个人而言,我总是implement OnClickListener而不是匿名的内部类。他们总觉得我很烦。那或者如果这是一个特别复杂的观点,我偶尔会在一个新文件中定义一个不同的新类来单独处理该Activity / Fragment的所有点击。