亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 246 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號