【发布时间】:2018-09-27 02:05:15
【问题描述】:
目前我正在做一个项目,我需要在其中实施 RecyclerView/CardView。从 MainActivity 我在一个开关盒中调用片段,所有片段都在其中工作。每当我按下 Fragment CardViewTabelFragment(在模拟器中)时,我就会崩溃并得到 NullPointerException。 MainActivity 中的一切都在工作。我希望我对我的问题的描述符合您的期望,如果不是,那么我可以详细说明和/或附加更多代码。也感谢您提供反馈,以便下次我在这里发布问题时更加完整。
这是我在 MainActivity 中调用的片段:
public class CardViewTabelFragment extends Fragment {
private RecyclerView recyclerView;
private RecyclerAdapter adapter;
public CardViewTabelFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate( R.layout.fragment_card_view_tabel, container, false );
recyclerView = (RecyclerView) view.findViewById( R.id.recycler_view );
adapter = new RecyclerAdapter();
recyclerView.setAdapter( adapter );
final RecyclerView.LayoutManager layoutManager = new LinearLayoutManager( getActivity() );
((LinearLayoutManager) layoutManager).setOrientation( LinearLayoutManager.VERTICAL );
recyclerView.setLayoutManager( layoutManager ) ;
return view;
}
}
新的 RecyclerAdapter();延伸到另一个java类,代码如下:
public class RecyclerAdapter extends RecyclerView.Adapter {
public static String[] title = new String[] {"Sensor 1", "Sensor 2"};
public static String[] beskrivelse = new String[] {"Temperatur & Humdity Sensorer", "Light Sensorer"};
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from( parent.getContext() ).inflate( R.layout.fragment_card_view_tabel, parent, false );
return new RecyclerViewHolder( view );
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
((RecyclerViewHolder) holder).bindView( position );
}
@Override
public int getItemCount() {
return title.length;
}
private class RecyclerViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private TextView mBeskrivelse;
private TextView mTitle;
public RecyclerViewHolder(View itemView) {
super( itemView );
mBeskrivelse = (TextView) itemView.findViewById( R.id.item_beskrivelse );
mTitle = (TextView) itemView.findViewById( R.id.item_title );
itemView.setOnClickListener( this );
}
@Override
public void onClick(View v) {
}
public void bindView(int position) {
mBeskrivelse.setText( beskrivelse[position] );
mTitle.setText( title[position] );
}
}
}
` 我的 LogCat 如下,你可以清楚地看到,异常发生在
recyclerView.setAdapter(适配器);
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.yusuf.cxweb, PID: 31207
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView.setAdapter(android.support.v7.widget.RecyclerView$Adapter)' on a null object reference
at com.example.yusuf.cxweb.CardViewTabelFragment.onCreateView(CardViewTabelFragment.java:39)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:2354)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1419)
at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1740)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1809)
at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:799)
at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2580)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2367)
at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2322)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2229)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:700)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
* 更新 *
片段卡片视图表的 XML 文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v7.widget.CardView
android:id="@+id/card_container1"
android:layout_width="match_parent"
android:layout_height="150dp"
android:layout_margin="16dp"
app:cardBackgroundColor="@color/colorGrass"
app:cardCornerRadius="4dp"
app:cardElevation="8dp">
<TextView
android:id="@+id/item_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textStyle="bold"
android:layout_gravity="center"
android:textColor="@color/colorWhite"
android:text="Sensor 1"
android:textAppearance="@style/TextAppearance.AppCompat.Large" />
<TextView
android:id="@+id/item_beskrivelse"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="30dp"
android:text="Sensor 1"
android:textAppearance="@style/TextAppearance.AppCompat.Large"
android:textColor="@color/colorWhite"
android:textSize="14sp" />
</android.support.v7.widget.CardView>
</LinearLayout>
* 上次更新 *
为了完成这项工作,我必须将充气机中的布局 -> 从“fragment_card_view_table”更改为“card_list”,这是我拥有的另一个 xml 文件,recyclerview 位于其中。非常感谢“TheWanderer”谁为我指明了正确的方向!
【问题讨论】:
-
layout.fragment_card_view_tabel.xml中有什么内容? -
刚刚更新并附加到问题中。感谢您的回答。
-
您的问题中没有 XML。
-
抱歉,出了点问题。现在已经上传了:)
-
你在那个 XML 中没有 RecyclerView。
标签: android android-fragments android-recyclerview