Android片段onClick与方法连接

时间:2015-03-06 22:20:46

标签: android

我有片段中按钮的连接方法的问题。 它不起作用...当我点击一个按钮时,我的应用程序总是关闭。 在正常活动中,它可以正常工作,但为什么不在碎片中?我该怎么说呢?

<Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="green"
            android:text="@string/green" />

View rootview;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    rootview = inflater.inflate(R.layout.menu1_layout, container, false);

return rootview;
}

和我的方法绿色

public void green(View v){

    //here everything is good
       }

import android.view.View.OnClickListener;被标记为“从未使用过”

1 个答案:

答案 0 :(得分:1)

你不能这样做,因为没有活动就没有对片段的上下文引用。因此,这只能在活动而不是片段中实现。这里要注意的重要一点是你的Fragment必须调用getActivity()来查找对上下文的引用,因为一个片段可以放在任何Activity片段中,它们本身没有上下文所以在这里引用Fragment的方法是不可能的。尊重。

直接来自Android:

  

在API 4中添加了public static final int onClick

     

单击视图时要调用的此View上下文中的方法的名称。此名称必须对应于只接受View类型的一个参数的公共方法。例如,如果指定android:onClick =“sayHello”,则必须声明上下文的公共void sayHello(View v)方法(通常是您的Activity)。

     

必须是字符串值,使用'\;'转义unicode字符的'\ n'或'\ uxxxx'等字符。

     

这也可能是对包含值的资源(格式为“@ [package:] type:name”)或主题属性(格式为“?[package:] [type:] name”)的引用这种类型。

     

常数值:16843375(0x0101026f)

<强>更新

然后使用它:

Button button = (Button) getView().findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {
   public void onClick(View v) {
        // Move your green(View v) method logic here instead of calling green(v)
   }
});

更新2

你的片段代码应该先做其他事情:

public class menu1_fragment extends Fragment {
      View rootview;
      @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
           rootview = inflater.inflate(R.layout.menu1_layout, container, false); 
        return rootview;
    }

     // Probably safer for you to use onViewCreated(View, Bundle)
     @Override
     public void onViewCreated(View view, Bundle savedInstanceState){
         super.onViewCreated(view, savedInstanceState);
          // use rootView or getView()
          Button button = (Button) rootView.findViewById(R.id.button1);
             button.setOnClickListener(new View.OnClickListener() {
                 public void onClick(View v) {
                  // Move your green(View v) method logic here instead of calling  green(v)
                }
          });
     }
 }

在View膨胀之前,您无法引用UI元素,这是导致错误的原因。或者,您可以使用onActivityCreated(Bundle savedInstanceState)