此片段用于了解片段的工作原理。但是,错误消息"类型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;
}
}
答案 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的所有点击。