为了账号安全,请及时绑定邮箱和手机立即绑定

OnClickListener() 在 Fragment 中崩溃

OnClickListener() 在 Fragment 中崩溃

MM们 2023-08-23 15:08:10
由于某种原因,当我单击应用程序中的工具栏(工具栏)和浮动按钮(按钮)时,OnClickListener()方法使代码片段和应用程序崩溃尽管ImageButton(OnOff)处理程序运行并且不会使片段崩溃分段public class ZnonkiFragment extends Fragment {    private SharedPreferences settings;    private ImageButton OnOff;    private ViewPager viewPager;    private DrawerLayout drawerLayout;    private MainActivity.PagerAdapter pagerAdapter;    private FloatingActionButton button;    final Context context = getActivity();    private androidx.appcompat.widget.Toolbar toolbar;    private TabLayout tabLayout;    private String ZvonOne, ZvonTwo;    private List<Fragment> list = new ArrayList<>();    private String url;    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container,                             Bundle savedInstanceState) {        View view =  inflater.inflate(R.layout.fragment_znonki, container,       toolbar =  view.findViewById(R.id.toolbar);       toolbar.setNavigationIcon(getResources().getDrawable(R.drawable.menu));       toolbar.setNavigationOnClickListener(new View.OnClickListener() {           @Override           public void onClick(View view) {               Toast.makeText(context,"lel",Toast.LENGTH_LONG).show();           }       });        //...       addListenerOnButton(view);        return view;    }    public boolean checkString(String string) {        try {            Integer.parseInt(string);        } catch (Exception e) {            return false;        }        return true;    }    public void addListenerOnButton (final View viewOne){        OnOff = viewOne.findViewById(R.id.onOff);        button =  viewOne.findViewById(R.id.floatingActionButton);        OnOff.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {               //...        });
查看完整描述

3 回答

?
噜噜哒

TA贡献1784条经验 获得超7个赞

我认为这个问题的主要原因是


final Context context = getActivity();

这是用在


toolbar.setNavigationOnClickListener(new View.OnClickListener() {

           @Override

           public void onClick(View view) {

               Toast.makeText(context,"lel",Toast.LENGTH_LONG).show();

           }

       });

请注意 getActivity() 方法返回附加此片段的当前活动。并且您在片段对象在附加到活动之前创建时调用。


您可以将上面的代码更改为:


Context context;

并将该方法重写为


@Override

    public void onAttach(Context context) {

        super.onAttach(context);

        this.context = context;

    }

希望这能回答您的问题。


查看完整回答
反对 回复 2023-08-23
?
守候你守候我

TA贡献1802条经验 获得超10个赞

解决办法很简单


在您的片段类文件中,不要创建用于调用单击事件的自定义函数,而是可以通过简单地在类文件中实现它们然后覆盖它来使用 android 的默认方法。这使得代码在将来更加简单和可重用。


public class ZnonkiFragment extends Fragment implements View.OnClickListener, View.OnLongClickListener {

    private SharedPreferences settings;

    private ImageButton OnOff;

    private ViewPager viewPager;

    private DrawerLayout drawerLayout;

    private FloatingActionButton button;

    final Context context = getActivity();

    private TabLayout tabLayout;

    private String ZvonOne, ZvonTwo;

    private List<Fragment> list = new ArrayList<>();

    private String url;

    private Toolbar mToolbar;


    @Override

    public View onCreateView(LayoutInflater inflater, ViewGroup container,

                             Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_znonki, container, false);

        mToolbar = view.findViewById(R.id.toolbar);

        mToolbar.setNavigationIcon(getResources().getDrawable(R.drawable.ic_launcher_background));

        mToolbar.setNavigationOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View view) {

                Toast.makeText(context, "lel", Toast.LENGTH_LONG).show();

            }

        });

        //...


        OnOff = view.findViewById(R.id.onOff);

        OnOff.setOnClickListener(this);

        OnOff.setOnLongClickListener(this);


        button = view.findViewById(R.id.floatingActionButton);


        return view;

    }


    public boolean checkString(String string) {

        try {

            Integer.parseInt(string);

        } catch (Exception e) {

            return false;

        }

        return true;

    }


    @Override

    public void onClick(View view) {

        switch (view.getId()) {

            case R.id.onOff:

                //call your onclick function here...

                break;

            case R.id.floatingActionButton:

                //call your onclick function here...

                break;

        }

    }


    @Override

    public boolean onLongClick(View view) {

        switch (view.getId()) {

            case R.id.floatingActionButton:

                //call your long click function here...

                break;

        }

        return false;

    }

}

由于库导入不当,工具栏崩溃了。如果您尚未在 gradle 文件中使用 androidx 库,那么您可以使用简单的工具栏,即“import android.support.v7.widget.Toolbar”。这肯定会阻止工具栏上的 onclick 崩溃。如果有任何问题,请告诉我。谢谢。


查看完整回答
反对 回复 2023-08-23
?
森林海

TA贡献2011条经验 获得超2个赞

你不需要这个:

final Context context = getActivity();

如果您需要访问 Fragment 中的上下文,您可以调用requireContext()如果您需要访问 Activity,您可以调用requireActivity()

所以你的吐司消息可以变成:

Toast.makeText(requireContext(),"lel",Toast.LENGTH_LONG).show();


查看完整回答
反对 回复 2023-08-23
  • 3 回答
  • 0 关注
  • 140 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信