`

关于在内部类中启动一个Android Intent的疑惑

阅读更多

在网上看到的所有android例子都是把adapter和listener写在一起,多是内部类的实现方式。我今天想把他们分离开。即adapter和listener写在一个class里面,adapter和listener在同一个class中以内部类形式存在。但是adapter在相关操作上正常,但是listener缺出现启动一个activity时null指针问题。代码如下

 

在一个JshopActivityIndex中我使用了viewpager控件

我先把viewpager的相关adapter和listener写在了JshopViewpagerAdapter

 

package com.jshop.android.widget;

import java.util.ArrayList;

import com.jshop.android.index.JshopActivityIndex;
import com.jshop.android.index.JshopMIndex;
import com.jshop.android.index.R;
import com.jshop.android.index.WelcomeAct;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.widget.ImageView;

public class JshopViewpagerAdapter extends Activity {

	public class JshopActivityIndexViewpagerAdapter extends PagerAdapter {

		private ArrayList<View> pageViews;

		public JshopActivityIndexViewpagerAdapter() {
			super();
			// TODO Auto-generated constructor stub
		}

		/**
		 * 对左右滚动空间进行适配器定义和操作
		 */
		public JshopActivityIndexViewpagerAdapter(ArrayList<View> pv) {
			this.pageViews = pv;
		}

		@Override
		public int getCount() {
			return pageViews.size();
		}

		@Override
		public boolean isViewFromObject(View arg0, Object arg1) {
			return arg0 == arg1;
		}

		@Override
		public void destroyItem(View container, int position, Object object) {
			((ViewPager) container).removeView(pageViews.get(position));
		}

		@Override
		public void finishUpdate(View container) {
			// TODO Auto-generated method stub
		}

		@Override
		public Object instantiateItem(View container, int position) {
			// TODO Auto-generated method stub
			((ViewPager) container).addView(pageViews.get(position));
			return pageViews.get(position);
		}

		@Override
		public void setPrimaryItem(View container, int position, Object object) {
			// TODO Auto-generated method stub
			super.setPrimaryItem(container, position, object);
		}

		@Override
		public void startUpdate(View container) {
			// TODO Auto-generated method stub
			super.startUpdate(container);
		}

	}
	 // 指引页面更改事件监听器
    public class JshopActivityIndexViewpagerPageChangeListener  implements OnPageChangeListener {  
    	private Context context;
    	private ImageView[] imageViews;
    	
    	public JshopActivityIndexViewpagerPageChangeListener(Context ctx,ImageView[] v){
    		this.context=ctx;
    		this.imageViews=v;
    	}
        @Override  
        public void onPageScrollStateChanged(int arg0) {  
            // TODO Auto-generated method stub  
        }
  
        @Override  
        public void onPageScrolled(int arg0, float arg1, int arg2) {  
            // TODO Auto-generated method stub  
        }  
  
        @Override  
        public void onPageSelected(int arg0) {
            for (int i = 0; i < imageViews.length; i++) {  
                imageViews[arg0].setBackgroundResource(R.drawable.page_indicator_focused);
                
                if (arg0 != i) {  
                    imageViews[i].setBackgroundResource(R.drawable.page_indicator);  
                }  
            }
            if(arg0==5){
            	Intent intent = new Intent(context,JshopMIndex.class);
				startActivity(intent);
            }
        }  
    }

	
}

当程序执行到

 

 if(arg0==5){
            	Intent intent = new Intent(context,JshopMIndex.class);
				startActivity(intent);
            }


启动另一个activity时候就会报错。

 

我是这样调用这个内部类的

 

	viewPager.setAdapter(new JshopViewpagerAdapter().new JshopActivityIndexViewpagerAdapter(pageViews));
		viewPager.setOnPageChangeListener(new JshopViewpagerAdapter().new JshopActivityIndexViewpagerPageChangeListener(JshopActivityIndex.this,imageViews));


我也在网上查到了类似问题地址是

http://stackoverflow.com/questions/6140157/startactivityforresult-null-pointer-exception-context

我心里想把adapter和listener分离,可以让activity的代码不用那么长,可是目前只能做到分离adapter。希望有高人指点下

 

分享到:
评论

相关推荐

    Android利用Intent启动和关闭Activity

    Intent不仅能够启动一个新的Activity,还能在Activity之间传递数据,实现应用内部或应用间的交互。 ### 一、Intent启动Activity #### 1. 显式启动 显式启动是通过Intent明确指定要启动的Activity的类名。创建...

    Android的Intent实验

    在Android开发中,Intent是一种非常重要的组件,它用于在应用程序的不同组件之间传递消息,实现活动(Activity)、服务(Service)、广播接收器(Broadcast Receiver)以及内容提供者(Content Provider)之间的交互...

    Android intent原理分析

    当我们在代码中构造并发送一个Intent时,例如: ```java Intent intent = new Intent(AudioManager.ACTION_AUDIO_BECOMING_NOISY); mContext.sendBroadcast(intent); ``` 此处仅设置了Action,意味着任何注册了...

    Android中intent的使用

    在Android应用开发中,Intent是连接应用程序组件之间通信的关键机制,它用于启动其他组件或传递数据。本篇文章将深入探讨Intent的基本概念、类型、构造方法以及如何在Android中有效地使用Intent。 Intent是一种意图...

    android Intent例子源码

    android Intent例子源码android Intent例子源码android Intent例子源码android Intent例子源码android Intent例子源码android Intent例子源码

    Android Intent切换.zip

    在Android开发中,Intent是一个非常核心的组件,它充当了应用程序之间通信的桥梁。Intent用于启动活动(Activity)、服务(Service)或者广播接收器(BroadcastReceiver),也可以传递数据和执行其他操作。本资料...

    Android应用:Intent打开另外一个Activity,Intent拨电话,Intent在2个Activity间传递参数

    在Android应用开发中,Intent是一种强大的机制,用于在组件之间进行通信。Intent不仅可以用来启动新的Activity,还可以启动服务、广播接收器等。本教程将详细讲解如何使用Intent来实现特定的功能,包括打开新的...

    Android Intent传递数据大小限制详解

    前言 在sendBroadcast,startActivity时,我们会用到Intent。 Intent可以携带一些数据,比如基本类型数据int、Boolean,或是String,或是序列化...在Intent中传入一个Parcelable对象;例如传入一个bitmap对象。 代

    Android Intent Filter用法

    在Android应用开发中,Intent Filter是一个至关重要的概念,它用于定义一个组件(如Activity或BroadcastReceiver)能够响应的Intent类型。Intent Filter就像一个过滤器,筛选出应用可以处理的特定操作,使得系统能够...

    Android中关于Broadcast、Intent 的应用

    Intent在Android中则是一个包含意图信息的对象,它用于启动活动(Activity)、服务(Service)或者传递数据。Intent有两种主要类型:显式Intent和隐式Intent。显式Intent明确了要启动的目标组件,通过组件的类名进行...

    android用于打开各种文件的intent.pdf

    在上面的代码中,我们首先创建了一个 Intent 对象,并指定了动作为 "android.intent.action.VIEW",然后使用 setDataAndType 方法设置了 URI 和类型为 "application/pdf",最后使用 startActivity 方法启动该 Intent...

    Android Activity 的四种启动模式 lunchMode 和 Intent.setFlags()

    - **描述**:当 Activity 的启动模式设置为 `standard` 时,每次通过 Intent 启动该 Activity 都会在任务栈中创建一个新的实例,即使该 Activity 已经存在于栈中也不会复用已有的实例。这种模式适用于大多数场景,...

    android中intent使用示例

    在Android开发中,Intent是一种非常重要的组件间通信机制。它被用来启动活动(Activity)、服务(Service)或者传递数据。本示例将深入探讨Intent的基本用法和常见应用场景。 首先,Intent分为显式Intent和隐式...

    Android Intent传递对象

    在Android应用开发中,Intent是一种强大的工具,用于在不同的组件之间进行通信,如启动Activity、启动Service或在组件间传递数据。"Android Intent传递对象"这个主题主要关注如何利用Intent来传递自定义对象,以便在...

    android开发中Intent在两个Activity间传值示例

    在Android中,我们通常用Intent来启动一个新的Activity或者Service,同时Intent也可以携带数据。 2. **Intent的创建** 创建Intent有两种方式:通过`new Intent(Context, Class)`构造方法指定源Context(通常是当前...

    Android 一个app启动另一个app

    在Android平台上,应用程序之间的交互是通过Intent机制实现的,这使得一个App能够启动另一个App,或者触发特定的操作。"Android 一个app启动另一个app"这个主题涉及到的核心知识点包括Intent的使用、Intent Filter的...

    android Intent实例

    `Intent`是Android中的一个类,用于封装一个操作请求。它可以被用来启动一个新的Activity(活动)、启动服务、广播事件等。`Intent`主要有两种形式:显式Intent和隐式Intent。 - **显式Intent**:明确指定目标组件...

    经典的android intent 窗口切换 窗口打开

    在Android开发中,Intent是一种非常重要的组件,它用于在应用程序的不同组件之间建立通信桥梁,尤其在窗口(Activity)之间的切换和数据传递上扮演着核心角色。Intent不仅可以启动新的Activity,还可以启动Service、...

    android intent 的生命周期讲解和历程

    在Android应用开发中,Intent是连接各个组件的重要桥梁,它用于启动Activity、Service,传递数据以及触发Broadcast Receiver。本文将深入解析Intent的生命周期,并结合源码进行详细讲解。 首先,理解Intent的基本...

    android intent 代码

    在Android开发中,Intent是一个非常重要的概念,它用于在组件之间传递消息,是Android系统启动服务、启动或跳转Activity的主要手段。本篇文章将详细解释Intent的基本使用以及如何通过Intent实现在两个Activities之间...

Global site tag (gtag.js) - Google Analytics