Android 封装popwindow类,实现所有activity共用
来源:互联网 发布:android 虚拟机 java 编辑:程序博客网 时间:2024/06/18 15:51
popwindow是一个弹出window,在此对其进行封装,使这个popwindow可以在所有页面都显示。
在CSDN上有类似的封装类供下载,可以去自行下载然后做修改。附上地址:http://download.csdn.net/detail/jdsjlzx/9583823
这样一来就会出现一个问题,定义popwindow上的item的点击事件做相应的动作的时候,就会提示空指针异常,从而强制退出程序。如下将分析如何解决。
定义公用类 以便调用所有activity调用。
import android.app.Activity;import android.content.Context;import android.content.Intent;import android.content.SharedPreferences;import android.os.Bundle;import android.view.View;import android.widget.AdapterView;import android.widget.ImageButton;import android.widget.Toast;import android.widget.AdapterView.OnItemClickListener;public class CommonPopWindowActivity extends Activity { private PopMenu popMenu; // 此popmenu是2中定义的popwindow生成类 private Context context; private Context current_activity; private static CommonPopWindowActivity instance; public synchronized static CommonPopWindowActivity getInstance() { if (null == instance) { instance = new CommonPopWindowActivity(); } return instance; } public void buildPopWindow(Activity activity, ImageButton popWind) { this.context = activity; popMenu = new PopMenu(context); popMenu.addItems(new String[] { "登录", "注销", "使用说明", "关于软件" }); // 菜单项点击监听器 popMenu.setOnItemClickListener(popmenuItemClickListener); popWind.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { popMenu.showAsDropDown(v); } }); } // 弹出菜单监听器 OnItemClickListener popmenuItemClickListener = new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { current_activity = view.getContext(); // current_activity 的定义是为了取得调用此方Activity //的本身实例,这样才不会报空指针异常。 System.out.println("下拉菜单点击" + position); // 取得item上的值 // HashMap<String, Object> item = (HashMap<String, Object>) // adapterView // .getItemAtPosition(position); Intent intent = new Intent(); intent.putExtra("Flag", RS_FLAG); intent.setClass(current_activity, LoginActivity.class); ((Activity) current_activity).startActivityForResult( intent, 5); popMenu.dismiss(); };}
定义pop类
import java.util.ArrayList;import com.ytumobilelibrary.R;import android.content.Context;import android.graphics.drawable.BitmapDrawable;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView.OnItemClickListener;import android.widget.BaseAdapter;import android.widget.ListView;import android.widget.PopupWindow;import android.widget.TextView;public class PopMenu { private ArrayList<String> itemList; private Context context; private PopupWindow popupWindow; private ListView listView; // private OnItemClickListener listener; public PopMenu(Context context) { this.context = context; itemList = new ArrayList<String>(5); View view = LayoutInflater.from(context).inflate(R.layout.popmenu, null); // 设置 listview listView = (ListView) view.findViewById(R.id.popwin_listView); listView.setAdapter(new PopAdapter()); listView.setFocusableInTouchMode(true); listView.setFocusable(true); // popupWindow = new PopupWindow(view, 100, LayoutParams.WRAP_CONTENT); popupWindow = new PopupWindow(view, context.getResources().getDimensionPixelSize(R.dimen.popmenu_width), context.getResources().getDimensionPixelSize(R.dimen.popmenu_height)); // context.getResources() // .getDimensionPixelSize(R.dimen.popmenu_width) // 这个是为了点击“返回Back”也能使其消失,并且并不会影响你的背景(很神奇的) popupWindow.setBackgroundDrawable(new BitmapDrawable()); } // 设置菜单项点击监听器 public void setOnItemClickListener(OnItemClickListener listener) { // this.listener = listener; listView.setOnItemClickListener(listener); } // 批量添加菜单项 public void addItems(String[] items) { for (String s : items) itemList.add(s); } // 单个添加菜单项 public void addItem(String item) { itemList.add(item); } // 下拉式 弹出 pop菜单 parent 右下角 public void showAsDropDown(View parent) { popupWindow.showAsDropDown(parent, 10, // 保证尺寸是根据屏幕像素密度来的 context.getResources().getDimensionPixelSize(R.dimen.popmenu_yoff)); // 使其聚集 popupWindow.setFocusable(true); // 设置允许在外点击消失 popupWindow.setOutsideTouchable(true); // // 刷新状态 popupWindow.update(); } // 隐藏菜单 public void dismiss() { popupWindow.dismiss(); } // 适配器 private final class PopAdapter extends BaseAdapter { @Override public int getCount() { // TODO Auto-generated method stub return itemList.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return itemList.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub ViewHolder holder; if (convertView == null) { convertView = LayoutInflater.from(context).inflate(R.layout.pomenu_item, null); holder = new ViewHolder(); convertView.setTag(holder); holder.groupItem = (TextView) convertView.findViewById(R.id.popwin_textView); } else { holder = (ViewHolder) convertView.getTag(); } holder.groupItem.setText(itemList.get(position)); return convertView; } private final class ViewHolder { TextView groupItem; } }}
pomenu_item.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="120.0dip"android:layout_height="wrap_content"android:orientation="vertical"android:gravity="center_vertical"android:background="@drawable/bg_pop_item" > <TextView android:id="@+id/popwin_textView" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="10.0dip" android:gravity="center" android:text="测试" android:textColor="#FFFFFF" android:textSize="17.0dip" /></LinearLayout>
pomenu.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/popup_view_cont"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical"> <ListView android:id="@+id/popwin_listView" android:layout_width="fill_parent" android:layout_height="0.0dip" android:layout_weight="1.0" android:background="@drawable/map_tips" android:cacheColorHint="#00000000" android:divider="@drawable/line2" android:dividerHeight="4.0dip" android:focusable="true" android:scrollbars="none" > </ListView></LinearLayout>
bg_pop_item.xml
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/home_btn_bg_s" android:state_pressed="true"/> <item android:drawable="@drawable/home_btn_bg_s" android:state_enabled="true" android:state_focused="true"/> <item android:drawable="@drawable/home_btn_bg_s" android:state_checked="true" android:state_enabled="true" ></item></selector>
在所有Activity中调用公用类CommonPopWindowActivity 的方法如下:
//ImageButton 是所有activity中定义的ImageButton,点击此bt可以弹出popwindowImageButton popWind = (ImageButton) findViewById(R.id.radio_button4);//加载popwindow this就是该activity的实例,这样在CommonPopWindowActivity类中跳转页面或者弹出toast才不会报空指针异常CommonPopWindowActivity.getInstance().buildPopWindow(this,popWind);
0 0
- 封装popwindow类,实现所有activity共用
- Android 封装popwindow类,实现所有activity共用
- Android 封装popwindow类,实现所有activity共用
- android-PopWindow简单实现
- Popwindow封装
- PopWindow封装
- android popwindow 实现下拉菜单
- Android popwindow 实现自定义数字键盘
- Android Activity基类封装
- IOS Iphone版广告移动的类(封装好了,所有页面共用一个广告)
- IOS广告移动的类(封装好了,所有页面共用一个广告)
- 调用所有的 android activity 的实现
- android实现退出时关闭所有activity
- 基类中的popwindow 再次封装
- Android应用Activity、Dialog、PopWindow、Toast窗口添加机制及源码分析 《四》-PopWindow
- Android简单PopWindow的实现方法。
- android的PopWindow实现下拉弹窗
- Android popwindow简单实现弹框
- 双向链表习题(牛客网习题)
- 水平recyclerview实现翻页效果
- 密码
- Android录音器
- EL表达式
- Android 封装popwindow类,实现所有activity共用
- 初始化vector实例的7种方法
- Jquery针对于表单元素的一些小东西
- php当数据量不是很大的时候,使用【递归循环出树形结构】的一个用户下面的所有人
- 伪类元素无法给定事件
- python机器登陆新浪微博代码示例
- 内核链表
- caffe再见之训练自己的数据
- Linux学习笔记