onClick内部片段调用Activity

lig*_*igi 44 android android-fragments

我现在正在将内容封装成一个片段,并遇到一个难以谷歌的问题.在我的片段里面是一些带有onClick属性的按钮,但它们在Activity上调用而不是来自android系统的片段 - 这使得封装有点笨拙.有没有办法让onClick的反射内容调用片段?我现在看到的唯一解决方案是不使用xml中的onClick并通过代码在片段内设置click-listeners.

lig*_*igi 59

我和一些googlers @#adl2011进行了交谈 - 他们认识到了这个问题,将来可能会有一个问题.在那之前 - 应该在Fragment中使用.setOnClick.

  • 嗯,你是第一个说这个的老实人.其他人都试图用荒谬的解释掩盖这个问题. (22认同)
  • 当Jeez表示他们会修复它时,他们会修复它.每6个月没有必要提醒他们! (4认同)
  • 是的,现在已经4年多了:) (2认同)

Xar*_*mer 8

问题是当布局被夸大时,它仍然是接收按钮点击的托管活动,而不是单个碎片.

我更喜欢使用以下解决方案来处理onClick事件.这适用于Activity和Fragments.

public class StartFragment extends Fragment implements OnClickListener{

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

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

        Button b = (Button) v.findViewById(R.id.StartButton);
        b.setOnClickListener(this);
        return v;
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.StartButton:

            ...

            break;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后问题消失了.


小智 5

这个对我有用

添加导入:

    import android.view.View.OnClickListener;
Run Code Online (Sandbox Code Playgroud)

Fragment.java

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

       rootView = (ViewGroup) inflater.inflate(R.layout.fragment, container, false);

       Button mButton = (Button) rootView.findViewById(R.id.button);
       mButton.setOnClickListener(new OnClickListener() {
          public void onClick(View v) {

          }
       });
       return rootView;
    }
Run Code Online (Sandbox Code Playgroud)