Tôi cố gắng sử dụng RecyclerView với RecyclerView.Adapter nhưng đây là điều gì đó sai. Tôi gửi mã của tôi dưới đây:java.lang.NullPointerException tại android.support.v7.widget.RecyclerView.onMeasure
Layout:
<android.support.v7.widget.RecyclerView
xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/topic_view"
android:scrollbars="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent" />
topic_tile.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="@dimen/tile_height">
<com.makeramen.RoundedImageView
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/avatar"
android:padding="16dp"
app:riv_corner_radius="72dp"
android:layout_height="72dp"
android:layout_width="72dp"
/>
<LinearLayout
android:id="@+id/text_layout"
android:orientation="vertical"
android:paddingTop="@dimen/text_padding_top_and_bottom"
android:paddingBottom="@dimen/text_padding_top_and_bottom"
android:paddingRight="16dp"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/title"
android:textSize="@dimen/primary_font"
android:paddingLeft="@dimen/text_padding_left"
android:textColor="#000000"
android:text="Title"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/author"
android:textSize="@dimen/secondary_font"
android:paddingLeft="@dimen/text_padding_left"
android:text="author"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
</RelativeLayout>
Đây là trong onCreate()
public class TitleListActivity extends ActionBarActivity {
private RecyclerView topic_view;
private RecyclerView.LayoutManager mLayoutManager;
private TitlelistAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_title_list);
.....
topic_view = (RecyclerView)findViewById(R.id.topic_view);
adapter = new TitlelistAdapter(topicList);
topic_view.setHasFixedSize(true);
mLayoutManager = new LinearLayoutManager(TitleListActivity.this);
topic_view.setLayoutManager(mLayoutManager);
topic_view.setItemAnimator(new DefaultItemAnimator());
topic_view.setAdapter(adapter);
Adapter:
public class TitlelistAdapter extends RecyclerView.Adapter<TitlelistAdapter.ViewHolder> {
public List<Topic> topicList;
public static class ViewHolder extends RecyclerView.ViewHolder{
TextView title;
TextView author;
RoundedImageView avatar;
public ViewHolder(View itemView) {
super(itemView);
title = (TextView)itemView.findViewById(R.id.title);
author = (TextView)itemView.findViewById(R.id.author);
avatar = (RoundedImageView)itemView.findViewById(R.id.avatar);
}
}
public TitlelistAdapter(List<Topic> topicList){
this.topicList = topicList;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View itemView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.topic_tile,viewGroup,false);
return new ViewHolder(itemView);
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
viewHolder.title.setText(topicList.get(i).title);
viewHolder.author.setText(topicList.get(i).member.username);
}
@Override
public long getItemId(int position) {
return super.getItemId(position);
}
@Override
public int getItemCount() {
return topicList.size();
}
}
Đây là ngoại lệ:
java.lang.NullPointerException
at android.support.v7.widget.RecyclerView.onMeasure(RecyclerView.java:1694)
at android.view.View.measure(View.java:16497)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
at android.view.View.measure(View.java:16497)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
at android.view.View.measure(View.java:16497)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
at android.support.v7.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:453)
at android.view.View.measure(View.java:16497)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
at android.view.View.measure(View.java:16497)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
at android.view.View.measure(View.java:16497)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2291)
at android.view.View.measure(View.java:16497)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1912)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1109)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1291)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:996)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5600)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
at android.view.Choreographer.doCallbacks(Choreographer.java:574)
at android.view.Choreographer.doFrame(Choreographer.java:544)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
Có điều gì đó tôi không init hoặc một cái gì đó tôi nên viết nhiều hơn?
đây là nhầm lẫn nhưng sau khi đã khắc phục, ứng dụng vẫn bị lỗi với ngoại lệ này – Randy
bạn cũng có thể đăng tệp bố cục 'topic_tile' của mình không? – Android2390
Ngoài ra, nếu bạn xem câu trả lời này tại: http://stackoverflow.com/questions/24458538/using-cardview-and-recyclerview-in-my-layout-files-throws-an-exception, nó gợi ý rằng bạn nên tạo một biến thành viên cho lớp 'LayoutManager' thay vì' setLayoutManager (new LinearLayoutManager (TitleListActivity.this)); ' – Android2390