3 回答

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超7個(gè)贊
我認(rèn)為這個(gè)問(wèn)題的主要原因是
final Context context = getActivity();
這是用在
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(context,"lel",Toast.LENGTH_LONG).show();
}
});
請(qǐng)注意 getActivity() 方法返回附加此片段的當(dāng)前活動(dòng)。并且您在片段對(duì)象在附加到活動(dòng)之前創(chuàng)建時(shí)調(diào)用。
您可以將上面的代碼更改為:
Context context;
并將該方法重寫(xiě)為
@Override
public void onAttach(Context context) {
super.onAttach(context);
this.context = context;
}
希望這能回答您的問(wèn)題。

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超10個(gè)贊
解決辦法很簡(jiǎn)單
在您的片段類(lèi)文件中,不要?jiǎng)?chuàng)建用于調(diào)用單擊事件的自定義函數(shù),而是可以通過(guò)簡(jiǎn)單地在類(lèi)文件中實(shí)現(xiàn)它們?nèi)缓蟾采w它來(lái)使用 android 的默認(rèn)方法。這使得代碼在將來(lái)更加簡(jiǎn)單和可重用。
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;
? ? }
}
由于庫(kù)導(dǎo)入不當(dāng),工具欄崩潰了。如果您尚未在 gradle 文件中使用 androidx 庫(kù),那么您可以使用簡(jiǎn)單的工具欄,即“import android.support.v7.widget.Toolbar”。這肯定會(huì)阻止工具欄上的 onclick 崩潰。如果有任何問(wèn)題,請(qǐng)告訴我。謝謝。

TA貢獻(xiàn)2011條經(jīng)驗(yàn) 獲得超2個(gè)贊
你不需要這個(gè):
final?Context?context?=?getActivity();
如果您需要訪(fǎng)問(wèn) Fragment 中的上下文,您可以調(diào)用requireContext()
如果您需要訪(fǎng)問(wèn) Activity,您可以調(diào)用requireActivity()
所以你的吐司消息可以變成:
Toast.makeText(requireContext(),"lel",Toast.LENGTH_LONG).show();
添加回答
舉報(bào)