android中fragment中嵌套viewpager运行报错

本人陈大帅 2016-11-16 08:50:46
在fragment中嵌套了一个viewpager之后运行老是报错,直接在activity中嵌套就不会报错。一直没弄明白是怎么回事。求大神讲解、
Main代码:
import android.app.Activity;
import android.os.Bundle;
import android.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;

import com.days.fragment.MyView;

public class Main extends FragmentActivity {

FragmentManager manager;
FragmentTransaction transaction;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
manager = getSupportFragmentManager();
transaction = manager.beginTransaction();
MyView myView = new MyView();
transaction.replace(R.id.main,myView);
transaction.commit();
}
}

Fragment代码:
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.TextView;

import com.days.R;
import com.days.adapter.MyAdapter;
import java.util.ArrayList;
import java.util.List;


public class MyView extends Fragment implements View.OnClickListener{

ViewPager mViewPager;
List<Fragment> frag_list=new ArrayList<Fragment>();
Button page_1_btn,page_2_btn,page_3_btn,page_4_btn,page_5_btn;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.view, null);
getView();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
//透明状态栏
getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
initView();
initViewPage();
initEvent();
return view;
}
private void initEvent() {
page_1_btn.setOnClickListener(this);
page_2_btn.setOnClickListener(this);
page_3_btn.setOnClickListener(this);
mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
/**
*ViewPage左右滑动时
*/
@Override
public void onPageSelected(int arg0) {
int currentItem = mViewPager.getCurrentItem();
switch (currentItem) {
case 0:
resetImg();
page_1_btn.setBackgroundResource(R.drawable.health2);
break;
case 1:
resetImg();
page_2_btn.setBackgroundResource(R.drawable.outdoor2);
break;
case 2:
resetImg();
page_3_btn.setBackgroundResource(R.drawable.note2);
break;
default:
break;
}
}

@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {

}

@Override
public void onPageScrollStateChanged(int arg0) {

}
});
}

/**
* 初始化设置
*/
private void initView() {
// 初始化三个按钮
page_1_btn = (Button)getView().findViewById(R.id.page_1_btn);
page_2_btn = (Button)getView().findViewById(R.id.page_2_btn);
page_3_btn = (Button)getView().findViewById(R.id.page_3_btn);
}

/**
* 初始化ViewPage
*/
private void initViewPage() {

// 初妈化四个布局
List<Fragment> fragments=new ArrayList<Fragment>();
fragments.add(new Pager_1());
fragments.add(new Pager_2());
fragments.add(new Pager_3());
MyAdapter adapter = new MyAdapter(getActivity().getSupportFragmentManager(), fragments);

//设定适配器
mViewPager = (ViewPager)getView().findViewById(R.id.main_pager);
mViewPager.setAdapter(adapter);
}

/**
* 判断哪个要显示,及设置按钮图片
*/
@Override
public void onClick(View arg0) {

switch (arg0.getId()) {
case R.id.page_1_btn:
mViewPager.setCurrentItem(0);
resetImg();
page_1_btn.setBackgroundResource(R.drawable.health2);
break;
case R.id.page_2_btn:
mViewPager.setCurrentItem(1);
resetImg();
page_1_btn.setBackgroundResource(R.drawable.outdoor2);
break;
case R.id.page_3_btn:
mViewPager.setCurrentItem(2);
resetImg();
page_1_btn.setBackgroundResource(R.drawable.note2);
break;
default:
break;
}
}

/**
* 把所有图片变暗
*/
private void resetImg() {
page_1_btn.setBackgroundResource(R.drawable.health);
page_2_btn.setBackgroundResource(R.drawable.outdoor);
page_3_btn.setBackgroundResource(R.drawable.note);
}


}

两个Layout代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/main"
android:name="com.days.fragment.MyView"
/>
</LinearLayout>



<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#ffffff">

<android.support.v4.view.ViewPager
android:id="@+id/main_pager"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</android.support.v4.view.ViewPager>
"

<include layout="@layout/bottom" />

</LinearLayout>
...全文
288 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
丿末兮 2016-11-18
  • 打赏
  • 举报
回复
直接上demo 大家看的直接明了
Stanny_Bing 2016-11-18
  • 打赏
  • 举报
回复
另外,你打个断点debug啊,你都不知道哪里报的错,那有什么用呀
Stanny_Bing 2016-11-18
  • 打赏
  • 举报
回复
getView????,不能直接传view过去么? 删掉getview试试
LoveWyf_ 2016-11-18
  • 打赏
  • 举报
回复
引用 5 楼 qq_21883695 的回复:
[quote=引用 4 楼 qq_25412055 的回复:] 调用equals的String对象是null,你没有实例化,错误不在你上面贴出的那部分代码
额,但是我的Main这个类里面根本没有equals方法啊
public class Main extends FragmentActivity {

    FragmentManager manager;
    FragmentTransaction transaction;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        manager = getSupportFragmentManager();
        transaction = manager.beginTransaction();
        MyView myView = new MyView();
        transaction.replace(R.id.main,myView);
        transaction.commit();
    }
}
[/quote] 把你的log全贴出来,不要只给一点
本人陈大帅 2016-11-17
  • 打赏
  • 举报
回复
引用 4 楼 qq_25412055 的回复:
调用equals的String对象是null,你没有实例化,错误不在你上面贴出的那部分代码
额,但是我的Main这个类里面根本没有equals方法啊
public class Main extends FragmentActivity {

    FragmentManager manager;
    FragmentTransaction transaction;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        manager = getSupportFragmentManager();
        transaction = manager.beginTransaction();
        MyView myView = new MyView();
        transaction.replace(R.id.main,myView);
        transaction.commit();
    }
}
LoveWyf_ 2016-11-17
  • 打赏
  • 举报
回复
调用equals的String对象是null,你没有实例化,错误不在你上面贴出的那部分代码
LoveWyf_ 2016-11-17
  • 打赏
  • 举报
回复
报什么错,把log日志贴出来
幻影宇寰 2016-11-17
  • 打赏
  • 举报
回复
本人陈大帅 2016-11-17
  • 打赏
  • 举报
回复
引用 2 楼 qq_25412055 的回复:
报什么错,把log日志贴出来
错误log是这个,一直不明白怎么回事
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.days/com.days.Main}: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference

80,359

社区成员

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

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