- 浏览: 62759 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
u014549257:
...
Apache Mina: StreamIoHandler传输文件处理 -
至尊包:
想问一下,这个官网的列子如果要兼容3.0以下的版本要怎么处理? ...
Swipe Views (水平分页)
我本来想在ListFragment中使用ExpandableList, 几次尝试终告失败。 因此,我修改了练习方案,在一个DialogFragment中使用ExpandableListView, 运行成功了,不过相貌比较难看,特别是那个GroupIndicator图片,因被拉伸显得极其丑陋, 这个问题以后再解决吧。
1. 在layout中配置ExpandableListView
2. 源码中,显示ExpandableListView的代码
3. 自定义点击子项时的操作
完整的代码:
1. 在layout中配置ExpandableListView
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <ExpandableListView android:id="@+id/expandableList1" android:layout_width="match_parent" android:layout_height="match_parent" android:groupIndicator="@drawable/collapsed" > </ExpandableListView> </LinearLayout>
2. 源码中,显示ExpandableListView的代码
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { //找到layout资源中名为expandable_list.xml的文件 View v = inflater.inflate(R.layout.expandable_list, container, false); //找到该xml文件中定义的ExpandableListView的ID。 lv = (ExpandableListView) v.findViewById(R.id.expandableList1); Log.i(TAG, "lv is null:" + (lv==null?true:false)); //提取父组织的数据 mGroupsCursor = s.getListCursorByLevel(getActivity().getContentResolver(), 0); getActivity().startManagingCursor(mGroupsCursor); mGroupIdColumnIndex = mGroupsCursor.getColumnIndexOrThrow(AreaSQLiteHelper.COLUMN_ID); // Set up our adapter String s = getResources().getString(R.string.list_data_null); // 根据点击的父组织ID,显示其子组织的数据 mAdapter = new ProvinceExpandableListAdapter( mGroupsCursor, getActivity(), android.R.layout.simple_expandable_list_item_1, android.R.layout.simple_expandable_list_item_1, new String[] {AreaSQLiteHelper.COLUMN_NAMES}, // group title for group layouts new int[] { android.R.id.text1 }, new String[] {AreaSQLiteHelper.COLUMN_NAMES}, // exercise title for child layouts new int[] { android.R.id.text1} ); lv.setAdapter(mAdapter); // 配置子组织点击的事件监听器 lv.setOnChildClickListener(this); return v; } // extending SimpleCursorTreeAdapter class ProvinceExpandableListAdapter extends SimpleCursorTreeAdapter { public ProvinceExpandableListAdapter(Cursor cursor, Context context, int groupLayout, int childLayout, String[] groupFrom, int[] groupTo, String[] childrenFrom, int[] childrenTo) { super(context, cursor, groupLayout, groupFrom, groupTo, childLayout, childrenFrom, childrenTo); } // returns cursor with subitems for given group cursor @Override protected Cursor getChildrenCursor(Cursor groupCursor) { int _countryId = groupCursor.getInt(groupCursor.getColumnIndexOrThrow(AreaSQLiteHelper.COLUMN_ID)); Cursor provinceCursor = s.getListCursorByParentId(getActivity().getContentResolver(), _countryId); getActivity().startManagingCursor(provinceCursor); return provinceCursor; } // 需要配置子组织可选择 @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } }
3. 自定义点击子项时的操作
@Override // 该 class必须要执行ExpandableListView.OnChildClickListener的接口 public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { Log.i(TAG,"groupPosition=" + groupPosition + ", childPosition=" + childPosition + ", id=" + id); //此处实现的功能是:根据子组织的ID,动态刷新列表内容,并关闭此DIALOG CityListFragment list = (CityListFragment) getFragmentManager().findFragmentById(R.id.cities); if(list!=null) list.listByParentId(id); getDialog().dismiss(); return true; }
完整的代码:
package cn.com.demo.android.activity; import cn.com.demo.R; import cn.com.demo.android.activity.ProvinceList.ProvinceExpandableListAdapter; import cn.com.demo.android.contentprovider.area.AreaContentProvider; import cn.com.demo.android.db.AreaSQLiteHelper; import cn.com.demo.android.service.AreaDBImpl; import cn.com.demo.utility.MyActivity; import android.app.DialogFragment; import android.content.Context; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; import android.widget.ExpandableListAdapter; import android.widget.ExpandableListView; import android.widget.SimpleCursorTreeAdapter; import android.widget.Spinner; public class ProvinceListDialogFragment extends DialogFragment implements MyActivity, ExpandableListView.OnChildClickListener{ private static final String TAG = ProvinceListDialogFragment.class.getSimpleName(); ExpandableListView lv; private Cursor mGroupsCursor; // cursor for list of groups (list top nodes) private int mGroupIdColumnIndex; private ExpandableListAdapter mAdapter; private AreaDBImpl s = new AreaDBImpl(); static ProvinceListDialogFragment newInstance() { return new ProvinceListDialogFragment(); } public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Pick a style based on the num. int style = DialogFragment.STYLE_NORMAL, theme = android.R.style.Theme_Holo_Light; setStyle(style, theme); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.expandable_list, container, false); lv = (ExpandableListView) v.findViewById(R.id.expandableList1); Log.i(TAG, "lv is null:" + (lv==null?true:false)); mGroupsCursor = s.getListCursorByLevel(getActivity().getContentResolver(), 0); getActivity().startManagingCursor(mGroupsCursor); mGroupIdColumnIndex = mGroupsCursor.getColumnIndexOrThrow(AreaSQLiteHelper.COLUMN_ID); // Set up our adapter String s = getResources().getString(R.string.list_data_null); mAdapter = new ProvinceExpandableListAdapter( mGroupsCursor, getActivity(), android.R.layout.simple_expandable_list_item_1, android.R.layout.simple_expandable_list_item_1, new String[] {AreaSQLiteHelper.COLUMN_NAMES}, // group title for group layouts new int[] { android.R.id.text1 }, new String[] {AreaSQLiteHelper.COLUMN_NAMES}, // exercise title for child layouts new int[] { android.R.id.text1} ); lv.setAdapter(mAdapter); lv.setOnChildClickListener(this); return v; } // extending SimpleCursorTreeAdapter class ProvinceExpandableListAdapter extends SimpleCursorTreeAdapter { public ProvinceExpandableListAdapter(Cursor cursor, Context context, int groupLayout, int childLayout, String[] groupFrom, int[] groupTo, String[] childrenFrom, int[] childrenTo) { super(context, cursor, groupLayout, groupFrom, groupTo, childLayout, childrenFrom, childrenTo); } // returns cursor with subitems for given group cursor @Override protected Cursor getChildrenCursor(Cursor groupCursor) { int _countryId = groupCursor.getInt(groupCursor.getColumnIndexOrThrow(AreaSQLiteHelper.COLUMN_ID)); Cursor provinceCursor = s.getListCursorByParentId(getActivity().getContentResolver(), _countryId); getActivity().startManagingCursor(provinceCursor); return provinceCursor; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } } @Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { Log.i(TAG,"groupPosition=" + groupPosition + ", childPosition=" + childPosition + ", id=" + id); CityListFragment list = (CityListFragment) getFragmentManager().findFragmentById(R.id.cities); if(list!=null) list.listByParentId(id); getDialog().dismiss(); return true; } }
发表评论
-
android RSS reader
2013-09-26 15:04 12991. AndroidManifest.xml中的activit ... -
自定义ThreadPoolExecutor
2013-09-12 13:18 2171仍旧沿用ExecutorService的例子, 修改了Asyn ... -
关于ExecutorService的使用
2013-09-11 10:18 680ExecutorService: 线程池, 顾名思义是一个调度 ... -
使用后台服务下载文件的例子
2013-09-02 11:55 2176最近做了一个DEMO, 是通过httpURLConnectio ... -
Widget的开发: 一个最简单的例子
2013-06-14 10:29 1768首先,我们来说说基本概念。通常来说, 一个widget具备以下 ... -
Nofitication的使用
2013-05-22 15:16 1033Notification的例子,请参考附件。 1. 创建N ... -
Contextual Action Mode
2013-05-13 16:05 2072我在网上查了N多文章, 结果发现,在ANDROID自带 ... -
GridView显示ICON和TEXT
2013-05-08 12:00 10171. 设置GridView的布局 <?xml ver ... -
Swipe Views (水平分页)
2013-05-07 13:36 16131. 创建activity public class Co ... -
ExpandableListFragment及其使用
2013-04-17 16:33 0xxxxxxxxxxxxxxx xxxxxxxxxxxx xx ... -
动态ActionBar
2013-04-17 16:32 1591首先介绍一下该应用的主要操作界面 1. ProvinceLay ... -
Fragment开发实例
2013-03-15 12:15 1852SVN源码下载地址: https://svn.codespot ...
相关推荐
4. **在DialogFragment中使用它们** - 在`DialogFragment`的`onCreateView()`方法中,找到布局文件中的`TabLayout`和`ViewPager`视图,并进行上述配置。 - 如果需要,你可以在`onActivityCreated()`或`...
在本笔记中,我们将深入探讨如何在Android应用中有效地使用`DialogFragment`。 ### 1. `DialogFragment`简介 `DialogFragment`在Android 3.0(API级别11)被引入,它解决了在不同屏幕尺寸和方向上的对话框适配问题...
在Android开发中,DialogFragment是Fragment的一个子类,它提供了创建对话框式界面的功能。相比传统的AlertDialog,DialogFragment更易于管理生命周期,与Activity的交互也更为灵活。本教程将深入探讨DialogFragment...
Android DialogFragment的使用方法 ,google官方推荐使用DialogFragment代替Dialog. 具体的详细解释可以在我的博客http://blog.csdn.net/a253664942/article/details/45585661中看看,有问题的可以我给留言!
- 能够在FragmentTransaction中使用动画效果,如淡入淡出。 - 可以与其他Fragment交互,因为它们都属于同一个Activity的生命周期。 对于屏幕旋转问题,DialogFragment在屏幕旋转时会保留其状态,如果需要在旋转后...
在这个“dialogfragmentdemo”项目中,我们可以看到关于`DialogFragment`的各种使用示例。 ### 1. 基本用法 创建一个`DialogFragment`通常需要继承`DialogFragment`并重写`onCreateDialog()`方法。在此方法内,...
这些参数可以通过构造函数传递给自定义View,或者在DialogFragment中提供相应的设置界面供用户调整。 在实际开发中,还需要考虑错误处理和权限管理。录音功能可能需要`READ_EXTERNAL_STORAGE`和`WRITE_EXTERNAL_...
3.DialogFragment 的适配(在1440*900的宽度上面显示1080*900的对话框,并适配不同屏幕);4.在android5.1上面都是正常的,在android9.0上面会出现兼容问题(显示不全);本代码为java版本,带有V7版和androidx版,带...
在Android开发中,`DialogFragment`是用于展示对话框式界面的一种组件,它继承自`Fragment`类。在本项目中,“附加动画的DialogFragment”指的是在标准的`DialogFragment`基础上添加了特殊的动画效果,使得对话框的...
在DialogFragment中进行耗时操作时,应使用异步任务,如AsyncTask,避免阻塞主线程。完成后再更新DialogFragment的内容,确保用户体验流畅。 10. **DialogFragment的动画效果** 可以通过设置DialogFragment的动画...
在本文中,我们将深入探讨如何使用DialogFragment来实现底部弹窗布局,以及如何创建一个由C.L. Wang开发的基础模板。 首先,我们来看一下DialogFragment的基本用法。DialogFragment继承自Fragment,因此它需要覆写...
在本实例中,我们将深入探讨如何使用`DialogFragment`来创建一个简洁且实用的对话框。 首先,我们需要了解`DialogFragment`的基本结构。一个`DialogFragment`通常包含以下几个关键部分: 1. **定义类**:继承自`...
在这个"DialogFragment示例"中,我们将深入探讨如何使用DialogFragment以及其优势。 首先,DialogFragment是Fragment的子类,因此它具有Fragment的所有功能,比如可以独立于Activity进行布局、拥有自己的生命周期等...
在Android开发中,DialogFragment是一种常用的组件,它继承自Fragment并提供了对话框的功能。当我们需要在应用中实现底部弹出框分享效果时,DialogFragment是一个理想的选择。本篇将详细介绍如何利用自定义...
在Android开发中,DialogFragment是Android SDK提供的一种用于创建对话框式UI组件的类,它是Fragment的子类,可以方便地在Activity中显示模态对话框。本实例着重讲解如何利用DialogFragment自定义对话框,并提供了...
这可以通过在`onCreateDialog()`方法中使用LayoutInflater加载布局完成。 ```java @Override public Dialog onCreateDialog(Bundle savedInstanceState) { LayoutInflater inflater = requireActivity()....
在这个"DialogFragment Demo"中,我们将深入探讨如何使用`DialogFragment`,并参考提供的链接(http://blog.csdn.net/aomandeshangxiao/article/details/7790520)来了解具体的实现步骤。 首先,理解`...
1. 创建`ListFragment`的子类,或者直接在XML布局中使用`<fragment>`标签引用`ListFragment`。 2. 创建一个适配器,如`ArrayAdapter`或`CursorAdapter`,并将数据填充到适配器中。 3. 在`ListFragment`中设置适配器...
当我们需要在一个`DialogFragment`中使用`ViewPager`时,通常会创建一个自定义的`DialogFragment`子类,并在其中设置`ViewPager`。这通常包括以下步骤: 1. **创建`DialogFragment`子类**:首先,我们需要创建一个...
在Android开发中,`DialogFragment`是一个非常重要的组件,它结合了Fragment的功能和Dialog的特点,使得在应用程序中显示对话框变得更加灵活和易于管理。本文将深入探讨`DialogFragment`的自定义过程,以及如何处理...