ViewPager中嵌套recyclerView,应用崩溃

f1993yan 2016-10-12 03:01:04
我写了个应用,想用recyclerViewr和VIewPager实现,原理是在ViewPager中的fragment里嵌套一个recyclerView,但是卡在了recyclerView.getManager的位置,总是显示recyclerView得到一个null Object。
我的MainActivity的代码如下:
public class MainActivity extends AppCompatActivity {
private ViewPager mViewPage;
private MainPagerAdapter mPagerAdapter;
private ChatPageFragment mChatPage = new ChatPageFragment();
private MusicGroundFragment mMusicGround = new MusicGroundFragment();
private ContactPageFragment mContactPage = new ContactPageFragment();
private RecyclerView mChatRecycleView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//一些无关代码

initView();
}
private void initView(){
mViewPage = (ViewPager) findViewById(R.id.main_view_pager);
//mChatRecycleView = (RecyclerView) findViewById(R.id.chat_list_view);

FragmentTransaction ft= getSupportFragmentManager().beginTransaction();
ft.add(R.id.main_view_pager,mChatPage);
ft.add(R.id.main_view_pager,mMusicGround);
ft.add(R.id.main_view_pager,mContactPage);
ft.commit();
mChatRecycleView = mChatPage.getRecycleView();
mChatRecycleView.setLayoutManager(new LinearLayoutManager(this));
mChatRecycleView.setAdapter(new ChatPageAdapter(this));
ArrayList<Fragment> fragments = new ArrayList<>();
fragments.add(mChatPage);
fragments.add(mMusicGround);
fragments.add(mContactPage);

mPagerAdapter = new MainPagerAdapter(fragments);
mViewPage.setAdapter(mPagerAdapter);
}
//一些自动生成的代码
}

我的activity_main的代码如下:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context="com.f1993xuboss.musicpark.MainActivity">

<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">

<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />

</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/main_view_pager">
<android.support.v4.view.PagerTitleStrip
android:id="@+id/pager_title_strip"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom" >
<ImageSwitcher
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/chat_title_view"
android:layout_marginLeft="0dp"/>
<ImageSwitcher
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/contact_title_view"
android:layout_marginRight="0dp"/>
</android.support.v4.view.PagerTitleStrip>
</android.support.v4.view.ViewPager>
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
app:srcCompat="@android:drawable/ic_dialog_email" />
</android.support.design.widget.CoordinatorLayout>

我的ChatPageFragment的代码如下:

public class ChatPageFragment extends Fragment {
private RecyclerView recyclerView;
public RecyclerView getRecycleView(){return recyclerView;}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.chat_list_view,container,false);
this.recyclerView = (RecyclerView) view.findViewById(R.id.chat_list_view);
return view;
}
}

我的chat_list_view的代码如下:

<android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/chat_list_view">

</android.support.v7.widget.RecyclerView>

可能没什么关系,我的ChatPageAdapter的代码如下:

public class ChatPageAdapter extends RecyclerView.Adapter<ChatPageAdapter.ChatItemViewHolder> {
private Context mContext;
public ChatPageAdapter(Context context){
this.mContext = context;
}
@Override
public ChatItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(mContext).inflate(R.layout.chat_item,parent,false);
return new ChatItemViewHolder(view);
}

@Override
public void onBindViewHolder(ChatItemViewHolder holder, int position) {
//TODO:add holder behavior to adjust the data from the internet
}

@Override
public int getItemCount() {
return 3;
}

class ChatItemViewHolder extends RecyclerView.ViewHolder {
ImageView mImageView;
TextView mPersonName;
TextView mChatContext;
TextView mData;
public ChatItemViewHolder(View itemView) {
super(itemView);
mImageView = (ImageView) itemView.findViewById(R.id.chat_item_person);
mPersonName = (TextView) itemView.findViewById(R.id.chat_item_person_name);
mChatContext = (TextView) itemView.findViewById(R.id.chat_item_context);
mData = (TextView) itemView.findViewById(R.id.chat_item_data);
}
}
}

我的log如下:
FATAL EXCEPTION: main
Process: com.f1993xuboss.musicpark, PID: 2633
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.f1993xuboss.musicpark/com.f1993xuboss.musicpark.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView.setLayoutManager(android.support.v7.widget.RecyclerView$LayoutManager)' on a null object reference

at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView.setLayoutManager(android.support.v7.widget.RecyclerView$LayoutManager)' on a null object reference
at com.f1993xuboss.musicpark.MainActivity.initView(MainActivity.java:64)
at com.f1993xuboss.musicpark.MainActivity.onCreate(MainActivity.java:51)
at android.app.Activity.performCreate(Activity.java:6237)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
at android.app.ActivityThread.-wrap11(ActivityThread.java) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5417) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
我试了一下,网上说的常规方法是findViewById的方法不行,因为我activity_main.xml中没包含,所以我想在fragment函数中获取,但是屡试屡败,大神们有什么解决方法吗?或者换个思路也行。
...全文
424 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
f1993yan 2016-10-12
  • 打赏
  • 举报
回复
引用 3 楼 sinat_25136209 的回复:
萌新,,你的注释太少了
大神,这些都是模板化的代码。。。。
f1993yan 2016-10-12
  • 打赏
  • 举报
回复
引用 4 楼 qq_30670879 的回复:
mChatRecycleView = mChatPage.getRecycleView();有问题
对,就是这个问题,不能获取到对应的view,有什么办法吗?
f1993yan 2016-10-12
  • 打赏
  • 举报
回复
引用 6 楼 qq_23169015 的回复:
在fragment里
        mChatRecycleView.setLayoutManager(new LinearLayoutManager(getActivity()));
       mChatRecycleView.setAdapter(new ChatPageAdapter(getActivity()
));
我试过,但还是一样的错误,都是显示recyclerview为null object
疯狂的兔子ccc 2016-10-12
  • 打赏
  • 举报
回复
在fragment里
        mChatRecycleView.setLayoutManager(new LinearLayoutManager(getActivity()));
       mChatRecycleView.setAdapter(new ChatPageAdapter(getActivity()
));
疯狂的兔子ccc 2016-10-12
  • 打赏
  • 举报
回复
你为什么不再对应的fragment里操作recyclerViewr 呢?
qq_30670879 2016-10-12
  • 打赏
  • 举报
回复
mChatRecycleView = mChatPage.getRecycleView();有问题
sinat_bond 2016-10-12
  • 打赏
  • 举报
回复
萌新,,你的注释太少了
f1993yan 2016-10-12
  • 打赏
  • 举报
回复
我不要被挤下去,
f1993yan 2016-10-12
  • 打赏
  • 举报
回复
大神帮帮萌新吧,这个问题我反正卡了有两三天了,虽然可以不用ViewPager,直接使用RecyclerView来实现功能,但是我想试试看有没有办法直接实现。

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧