fragment-从activity调用ViewPager里Fragment的方法传参出现空指针异常?

问题描述

从activity调用ViewPager里Fragment的方法传参出现空指针异常?

报错信息如下:
FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.thefat.lingjunqi.enricher/com.thefat.lingjunqi.enricher.ActivityReading}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2308)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
at android.app.ActivityThread.access$600(ActivityThread.java:156)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1342)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:153)
at android.app.ActivityThread.main(ActivityThread.java:5338)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
at dalvik.system.NativeStart.main(Native Method)

Caused by: java.lang.NullPointerException

at com.thefat.lingjunqi.enricher.FragmentArticleEN.refresh(FragmentArticleEN.java:32)
at com.thefat.lingjunqi.enricher.ActivityReading.onCreate(ActivityReading.java:103)
at android.app.Activity.performCreate(Activity.java:5232)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1081)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2272)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)?
at android.app.ActivityThread.access$600(ActivityThread.java:156)?
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1342)?
at android.os.Handler.dispatchMessage(Handler.java:99)?
at android.os.Looper.loop(Looper.java:153)?
at android.app.ActivityThread.main(ActivityThread.java:5338)?
at java.lang.reflect.Method.invokeNative(Native Method)?
at java.lang.reflect.Method.invoke(Method.java:511)?
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)?
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)?
at dalvik.system.NativeStart.main(Native Method)

ActivityReading.class

 package com.thefat.lingjunqi.enricher;

import android.content.Context;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.util.DisplayMetrics;
import android.view.MenuItem;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.ArrayList;

public class ActivityReading extends FragmentActivity {

    private ViewPager mPager;
    private ArrayList<Fragment> fragmentsList;
    private ImageView bottomLine;
    private TextView textView1, textView2, textView3;

    private int currIndex = 0;
    private int bottomLineWidth;
    private int offset = 0;

    /*String [] articleTitle;
    String [] articleContent;
    String [] transTitle;
    String [] transContent;
    String wordsTitle;
    String [] wordsContent;*/

    public static final String ITEM_ID = "item_id";

    int color_current;
    int color_notCurrent;

    public static void actionStart(Context context, int id){
        Intent intent=new Intent(context,ActivityReading.class);
        intent.putExtra(ActivityReading.ITEM_ID,id);
        context.startActivity(intent);
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_reading);

        mPager = (ViewPager) findViewById(R.id.viewpager);

        getActionBar().setDisplayHomeAsUpEnabled(true);

        color_current=getResources().getColor(R.color.color_current);
        color_notCurrent =getResources().getColor(R.color.color_notcurrent);
        String [] articleTitle=getResources().getStringArray(R.array.lesson_name_list_en);
        String []articleContent=getResources().getStringArray(R.array.array_article);
        String []transTitle=getResources().getStringArray(R.array.lesson_name_list_cn);
        String []transContent=getResources().getStringArray(R.array.array_trans);
        String wordsTitle=getResources().getString(R.string.words_title);
        String []wordsContent=getResources().getStringArray(R.array.array_words);

        initImageView();

        int index=getIntent().getIntExtra(ActivityReading.ITEM_ID,0);

        textView1 = (TextView) findViewById(R.id.text1);
        textView2 = (TextView) findViewById(R.id.text2);
        textView3 = (TextView) findViewById(R.id.text3);

        textView1.setOnClickListener(new MyOnClickListener(0));
        textView2.setOnClickListener(new MyOnClickListener(1));
        textView3.setOnClickListener(new MyOnClickListener(2));

        final TextView[] titles = {textView1, textView2, textView3};

        fragmentsList = new ArrayList<>();

        FragmentArticleEN fragmentArticleEN = new FragmentArticleEN();
        FragmentArticleCN fragmentArticleCN = new FragmentArticleCN();
        FragmentWords fragmentWords = new FragmentWords();

        fragmentsList.add(fragmentArticleEN);
        fragmentsList.add(fragmentArticleCN);
        fragmentsList.add(fragmentWords);

        MyFragmentPagerAdapter Pageradapter=new MyFragmentPagerAdapter(getSupportFragmentManager(), fragmentsList);
        mPager.setAdapter(Pageradapter);
        mPager.setCurrentItem(0);

        FragmentArticleEN fragmentArticleEN_ = (FragmentArticleEN) Pageradapter.instantiateItem(mPager,0);
        FragmentArticleCN fragmentArticleCN_ = (FragmentArticleCN) Pageradapter.instantiateItem(mPager,1);
        FragmentWords fragmentWords_= (FragmentWords) Pageradapter.instantiateItem(mPager,2);

        fragmentArticleEN_.refresh(articleTitle[index],articleContent[index]);
        fragmentArticleCN_.refresh(transTitle[index],transContent[index]);
        fragmentWords_.refresh(wordsTitle,wordsContent[index]);

        mPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            int one=offset*2+bottomLineWidth;//页卡1->页卡2偏移量

            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                Animation animation=new TranslateAnimation(one*currIndex,one*position,0,0);
                animation.setFillAfter(true);
                animation.setDuration(250);
                bottomLine.startAnimation(animation);
                titles[currIndex].setTextColor(color_notCurrent);
                titles[position].setTextColor(color_current);
                currIndex=position;
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });

    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == android.R.id.home) {
            //创建启动ActivityTitle的Intent
            Intent intent = new Intent(this, ActivityTitle.class);

            //添加额外的Flag,将Activity栈中处于FirstActivity之上的Activity弹出
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

            //启动intent对应的Activity
            startActivity(intent);
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    private void initImageView() {
        bottomLine = (ImageView)findViewById(R.id.cursor);
        bottomLineWidth = BitmapFactory.decodeResource(getResources(), R.drawable.cursor).getWidth();
        DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);
        int screenW_Phone = dm.widthPixels;
        offset = (screenW_Phone/3 - bottomLineWidth)/2;

        //imgageview设置平移,使下划线平移到初始位置(平移一个offset)
        Matrix matrix = new Matrix();
        matrix.postTranslate(offset, 0);
        bottomLine.setImageMatrix(matrix);

    }

    public class MyOnClickListener implements View.OnClickListener {
        private int index = 0;

        public MyOnClickListener(int i) {
            index = i;
        }

        @Override
        public void onClick(View v) {
            mPager.setCurrentItem(index);
        }
    }
}

FragmentArticleEN.class

 package com.thefat.lingjunqi.enricher;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

/**
 * Created by lingjunqi on 2015/12/2.
 */

public class FragmentArticleEN extends Fragment {
    private View view;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        view=inflater.inflate(R.layout.fragment_fragment_article_en,container,false);
        return view;
    }

    public void refresh(String title, String content){
        View visibilityLayout=view.findViewById(R.id.visibility_layout);
       visibilityLayout.setVisibility(View.VISIBLE);

        TextView articleTitleText=(TextView)view.findViewById(R.id.article_titile);
        TextView articleContentText=(TextView)view.findViewById(R.id.article_content);

        articleTitleText.setText(title);
        articleContentText.setText(content);
    }

}

如果我采用的方法错误,谁能告诉一下正确的从一个activity向另一个activity内的ViewPager里的fragment传参或者调用它的方法。

解决方案

自己调试,看看谁是空就行了,传参数,可以通过广播

解决方案二:

或者注册回调函数(监听)

解决方案三:

Activity 中
fragment.setArguments(bundle)

Fragment 中 fragment.getArguments();

时间: 2025-01-28 10:28:03

fragment-从activity调用ViewPager里Fragment的方法传参出现空指针异常?的相关文章

viewpager里fragment的button点击跳转问题

问题描述 viewpager里fragment的button点击跳转问题 一个fragment里有一个viewpager: 这个viewpager包含了四个子fragment: 现想从子fragment1中点击按钮跳转到子fragment2,应该怎么做? 如何在该viewpager里写回调函数处理点击事件? 解决方案 首先,实现实现OnPageChangeListener 接口,其次写一个接口回掉,设置Viewpager.setCurrentItem(index) 应该就能解决你的问题,希望对你

com组件-Com组件调用C++回调函数,如何传参

问题描述 Com组件调用C++回调函数,如何传参 一.com组件接口函数的实现: 1.成员 private: //回调函数指针 CComPtr m_pChangeTempCallbackFun;//更换模板回调函数 2.函数 bool CDllHelper::SetCallBackFun(VARIANT vaJsFun) { if(vaJsFun.vt != VT_DISPATCH) { return false; } m_pChangeTempCallbackFun = vaJsFun.pdi

关于winform调用第三方控制台应用程序并传参

问题描述 现在从别人手里拿到一个用c++写好的控制台应用程序,是用来将.bin文件转换成对应的字符串并输出到新的.trc文件里弊端:但是每次只能输入一个bin文件,而且要用鼠标拖进这个控制台程序的窗口里,而我需要处理的bin文件有很多解决思路:想用winform的通过循环来不断启动上述控制台程序,然后将winform读到的指定路径下的bin文件传给上述控制台程序,这样读到了几个bin文件就传过去几个,最后让那个控制台程序去依次处理,省的我每次都要启动一次控制台,然后再拖进去一个bin文件.在网上

Fragment详解(一)---&amp;gt;核心基础以及Fragment与Activity传递数据完整示例

MainActivity如下: package cc.testsimplefragment0; import android.os.Bundle; import android.app.Activity; import android.app.FragmentTransaction; import cc.testsimplefragment0.TitlesListFragment.TitlesListFragmentCallBack; /** * Demo描述: * Fragment基本使用以及

Android Fragment和Activity互相通讯

一. 管理Fragment           管理Fragment在你的Activity你需要使用一个名为FragmentManager的类,通过调用getFragmentManager() 方法来实例化该管理类在你的Activity种. FragmentManager 类一些主要的方法有通过findFragmentById()来获取一个Activity中有关Fragment布局.当然还有类似 findFragmentByTag()方法,以及唐Fragment中出栈的popBackStack(

Android Fragment与Activity之间的相互通信实例代码_Android

Android Fragment与Activity之间的相互通信 前言 自从Android3.0引入Fragment之后,主要是为了支持动态灵活的界面设计和屏幕的适配问题.Fragmenty不能单独存在,必须依赖Activity作为视图展示的一部分,同事它具有自己的生命周期,接收它自己的事件,具有更加灵活的特性,如今Fragment已经被广泛的应用到App开发中,最常见的就是单Activity多Fragment的模式.Fragment依赖于Activity而存在,就不可避免需要与Activity

jquery.Ajax()方法调用Asp.Net后台的方法解析

 本篇文章主要是对jquery.Ajax()方法调用Asp.Net后台的方法进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 利用JQuery的$.ajax()可以很方便的调用asp.net的后台方法. 先来个简单的实例热热身吧.   1.无参数的方法调用 asp.net code:    代码如下: using System.Web.Script.Services;      [WebMethod]    public static string SayHello()    {   

jquery.Ajax()方法调用Asp.Net后台的方法解析_jquery

利用JQuery的$.ajax()可以很方便的调用asp.net的后台方法.先来个简单的实例热热身吧. 1.无参数的方法调用asp.net code: 复制代码 代码如下: using System.Web.Script.Services;   [WebMethod]   public static string SayHello()   {        return "Hello Ajax!";   }  using System.Web.Script.Services; [Web

tabs-关于在Actionbar Tab和ViewPager里面的Fragment的问题

问题描述 关于在Actionbar Tab和ViewPager里面的Fragment的问题 在tablet Actionbar Tabs和 phone ViewPager中能使用一个Fragment吗? 看似手机使用支持库,与 Actionbar中的TabListener 不兼容. 有什么方法能共同使用相同的Fragment? 我查资料看到这个方法,也供大家参考. 解决方案 你需要在adapter中实现它们共同的接口,来处理tab的转换. public class TabsPagerAdapte