【问题标题】:Fragment implements OnClickListener片段实现 OnClickListener
【发布时间】:2012-08-08 02:55:04
【问题描述】:

我有一个正在现代化的应用程序。此过程的一个步骤是更改为基于片段的布局(使用支持库中的片段)。 我将我的活动转换为片段,并且布局运行良好(使用 ViewPager,很酷的东西!)

我让我的活动实现 OnClickListener 来满足我所有的按钮按下需求。当然,我有新的 Fragment 化身做同样的事情,但看起来“onClick”永远不会受到打击。 Fragments 是否有什么特别之处阻止它们以这种方式工作?

【问题讨论】:

  • 我假设您的意思是它正在实施它?如public class YourFrag extends Fragment implements OnClickListener?如果是这样,您能否向我们展示您如何附加监听器以及onClick 方法?
  • 你是在onCreateView方法中找到ByViewId,然后在onActivityCreated方法中附加监听吗?
  • 哎呀,哇,我有点累了。是的,我的意思是实施,对不起。我正在 findViewByIding 并在 Update() 方法中附加侦听器。说起来,这真的是一回事吗?我什至没有 onActivityCreated 方法。嗯
  • 检查您的Update() 方法是否被调用。如果不是,请实现 onViewCreated(...) 并从那里调用它。
  • 解决了!我希望我能给你“接受”。我不知道自己在做什么(显然我不知道自己在做什么)

标签: android android-fragments onclicklistener


【解决方案1】:

只做一个

public class fragmentOne extends Fragment implements OnClickListener {
    Button myButton;

    @Override
    public View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedinstanceState) {
        View myView = inflater.inflate(R.layout.fragment_1, container, false);
        myButton = (Button) myView.findViewById(R.id.myButton);
        myButton.setOnClickListener(this);
        return myView;
    }

    @Override
    public void onClick(View v) {
        // implements your things
    }
}

很简单

【讨论】:

  • 简单的事情最不平凡。但只有智者才能看到。非常感谢。想了好几个小时。
  • 我忘记了:myButton.setOnClickListener(this);唉老兄 @@!长时间回来用android浪费了我的时间。谢谢。
  • 这拯救了我的一天,谢谢。
【解决方案2】:

我将重点使用 OnClick 动作进行全局访问,你必须这样做是你的项目,必须实现 View.OnClickListener,然后重写方法 OnClick(),在 OnCreateView() 中必须这样做 button_submit.setOnClickListener(this); 为您需要的视图, 请参阅下面的代码以获得明确的答案,谢谢。

public class New_Project extends Fragment implements View.OnClickListener{
private View mView;
private Button button_submit;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    mView = inflater.inflate(R.layout.fragment_newproject, container,false);
    button_submit=(Button)mView.findViewById(R.id.button_submit);
    button_submit.setOnClickListener(this);
    return mView;
}

@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.button_submit:
            //do your stuff
            break;
    }
}

}

【讨论】:

    【解决方案3】:

    我想评论 Abhijit Chakra 的答案,但我似乎需要 50 次代表。对于那些想知道您是否不能使用 Abhijit 答案的人,这是因为:

    public void OnClick(View v) {
        // implements your things
    }
    

    您需要确保它是 onClick,而不是 OnClick。幸好 Android Studio 内部错误消息来救援。

    【讨论】:

      【解决方案4】:
      view.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
          switch (v.getId()) {
            case R.id.imgView1:
              Toast.makeText(getActivity(), "Long pressing", Toast.LENGTH_SHORT).show();
              updateImage();
              break;
            case R.id.imgView2:
              Toast.makeText(getActivity(), "Long pressing", Toast.LENGTH_SHORT).show();
              updateImage();
              break;
            case R.id.imgView3:
              Toast.makeText(getActivity(), "Long pressing", Toast.LENGTH_SHORT).show();
              updateImage();
              break;
            default:
              break;
          }
      

      【讨论】:

        猜你喜欢
        • 2021-07-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-21
        • 1970-01-01
        • 2016-12-30
        相关资源
        最近更新 更多