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;
}
希望这能回答您的问题。
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 崩溃。如果有任何问题,请告诉我。谢谢。
TA贡献2011条经验 获得超2个赞
你不需要这个:
final Context context = getActivity();
如果您需要访问 Fragment 中的上下文,您可以调用requireContext()
如果您需要访问 Activity,您可以调用requireActivity()
所以你的吐司消息可以变成:
Toast.makeText(requireContext(),"lel",Toast.LENGTH_LONG).show();
添加回答
举报