这个问题在这里已经有了答案:
java.lang.NullPointerException on setOnClickListener in Fragment
(1 个回答)
2年前关闭。
我正在实现 set Toggle 按钮,单击后卡片 View 会更改颜色,但不幸的是,当我尝试登录我的 android 并且应用程序立即崩溃时出现错误。
这是我的 Java 类
package com.univibezstudios.ocappservice.ocapp;
import android.graphics.Color;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.cardview.widget.CardView;
import androidx.fragment.app.Fragment;
import com.univibezstudios.ocappservice.ocapp.R;
public class ClearFragmentAEA extends Fragment {
public ClearFragmentAEA(){
//this is the Center of Information clearance form
//Required empty Constructor
}
protected CardView cardView,cardViewbusar,cardViewsuahub,cardViewcict,cardViewDos,cardViewsports,cardViewedu,cardViewgeog,cardViewinfo,cardViewbio,cardViewchemphy;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
final View v =inflater.inflate (R.layout.fragment_clearaea, container, false);
cardView =(CardView)v.findViewById (R.id.snalaea);
cardViewbusar=(CardView)v.findViewById (R.id.bursarr);
cardViewsuahub=(CardView)v.findViewById (R.id.suahub);
cardViewcict =(CardView)v.findViewById (R.id.cict);
cardViewDos=(CardView)v.findViewById (R.id.Dos);
cardViewsports=(CardView)v.findViewById (R.id.sports);
cardViewbio =(CardView)v.findViewById (R.id.bioscience);
cardViewchemphy=(CardView)v.findViewById (R.id.chemphys);
cardViewedu =(CardView)v.findViewById (R.id.educationdept);
cardViewgeog=(CardView)v.findViewById (R.id.geogenv);
cardViewinfo=(CardView)v.findViewById (R.id.infomathe);
//set Events
setToggle(cardView);
setToggle (cardViewbusar);
setToggle (cardViewDos);
setToggle (cardViewcict);
setToggle (cardViewsuahub);
setToggle (cardViewsports);
setToggle (cardViewbio);
setToggle (cardViewinfo);
setToggle (cardViewedu);
setToggle (cardViewchemphy);
setToggle (cardViewgeog);
return v;
}
private void setToggle(final CardView cardView) {
cardView.setOnClickListener (new View.OnClickListener () {
@Override
public void onClick(View v) {
if(cardView.getCardBackgroundColor ().getDefaultColor () ==-1)
{
//change background color
cardView.setCardBackgroundColor (Color.parseColor ("#5B7683"));
Toast.makeText (getActivity (),"Request Sent",Toast.LENGTH_LONG).show ();
//disabling the button after one click
cardView.setEnabled (false);
}
else {
cardView.setCardBackgroundColor (Color.parseColor ("#ffffff"));
}
}
});
}
}
这是我的 fragment XML
<androidx.cardview.widget.CardView
android:layout_width="160dp"
android:layout_height="190dp"
android:layout_margin="10dp">
<androidx.cardview.widget.CardView
android:id="@+id/snalaea"
android:orientation="vertical"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/snalpicha"
android:layout_gravity="center"
android:padding="10dp"
android:src="@drawable/snal"
android:layout_width="120dp"
android:layout_height="120dp" />
<TextView
android:id="@+id/snaltext"
android:layout_gravity="center"
android:textSize="20sp"
android:textStyle="bold"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/snal"
android:fontFamily="sans-serif-black"
android:layout_marginTop="70dp"/>
</androidx.cardview.widget.CardView>
我得到的错误
AndroidRuntime:致命异常(exception):主要
进程:com.univibezstudios.ocappservice.ocapp,PID:14933
java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void androidx.cardview.widget.CardView.setOnClickListener(android.view.View$OnClickListener)”
在 com.univibezstudios.ocappservice.ocapp.ClearFragmentAEA.setToggle(ClearFragmentAEA.java:73)
在 com.univibezstudios.ocappservice.ocapp.ClearFragmentAEA.onCreateView(ClearFragmentAEA.java:61)
在 androidx.fragment.app.Fragment.performCreateView(Fragment.java:2439)
在 androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1460)
在 androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
在 androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:797)
在 androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManager.java:2625)
在 androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2411)
在 androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366)
在 androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273)
在 androidx.fragment.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3273)
在 androidx.fragment.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3229)
在 androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:201)
在 androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:620)
在 androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:178)
在 android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1391)
在 android.app.Activity.performStart(Activity.java:7157)
在 android.app.ActivityThread.handleStartActivity(ActivityThread.java:3042)
在 android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:180)
在 android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:165)
在 android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:142)
在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:70)
在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1837)
在 android.os.Handler.dispatchMessage(Handler.java:106)
在 android.os.Looper.loop(Looper.java:193)
在 android.app.ActivityThread.main(ActivityThread.java:6803)
在 java.lang.reflect.Method.invoke( native 方法)
在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:497)
在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
进程 14933 终止。
最佳答案
您可以尝试将“设置事件”代码移动到 onViewCreated
:
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
//set Events
setToggle(cardView);
setToggle (cardViewbusar);
setToggle (cardViewDos);
setToggle (cardViewcict);
setToggle (cardViewsuahub);
setToggle (cardViewsports);
setToggle (cardViewbio);
setToggle (cardViewinfo);
setToggle (cardViewedu);
setToggle (cardViewchemphy);
setToggle (cardViewgeog);
}
应用程序崩溃,因为 View 可能未完全初始化并导致
NullPointerException
在 onCreateView
.
关于java - 在 android studio 上的 cardview 上面对 Java.lang.NullPointerEXception,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59016455/