Android片段onClick连接方法



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

<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
       }

导入android.view.view.OnClickListener;标记为"从未使用过"

您不能这样做,因为没有"活动"就没有对片段的上下文引用。因此,这只可能发生在活动中,而不是片段中。这里需要注意的重要一点是,您的Fragment必须调用getActivity()来查找对上下文的引用,因为片段可以放置在任何活动片段中。片段本身实际上没有上下文,因此在这方面不可能在xml中引用Fragment的方法。

直接从Android:

公共静态最终intonClick添加到API 4 中

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

必须是字符串值,使用"\;"以转义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)
                }
          });
     }
 }

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

最新更新