是没有找到framedyn.dll这个包的Fragment,求助

Android&FragmentPagerAdapter数据刷新notifyDataSetChanged没效果研究
android3.0之后提出fragment概念正逐渐取代tabhost的地位,support-v4包也提供了很好使用的viewpager类。不多说。了解过fragment之后你会发现比tabhost好用许多,并且viewpager也支持fragment的嵌入,这使得项目的模块化耦合度大大降低,项目中使用ViewPager+Fragment实现tab分页+子tab页内容滑动效果
效果图如下:
点击个个tab1更换pageadapter的值实现数据的更新。通过继承fragmentpageadpater你会发现使用起来很方便。具体fragmentpageradapter怎么用?网上很多看客可以去搜一下。
下面我就要说到本文的核心当你更新里fragment
List集合后调用fragmentpageadpater的notifyDataSetChanged方法时发现数据根本就没有刷新。网络上会提到pageadapter的刷新方案如下代码:
& 复写pageradapter的getItemPosition方法设置tag为POSITION_NONE意思是没有找到child要求重新加载。
@Override &
public int getItemPosition(Object object) {
& &return POSITION_NONE;
结果你发现是刷新了一下但内容还是原始的数据。通过对fragmentpageadapter的源码查看你会在instantiateItem方法里面发现这一段
& // Do we already have this
& String name =
makeFragmentName(container.getId(), position);
& Fragment fragment =
mFragmentManager.findFragmentByTag(name);
& if (fragment != null) {
& & & if (DEBUG)
Log.v(TAG, "Attaching item #" + position + ": f=" +
fragment);
mCurTransaction.attach(fragment);
& } else {
& & & fragment =
getItem(position);
& & & if (DEBUG)
Log.v(TAG, "Adding item #" + position + ": f=" +
fragment);
mCurTransaction.add(container.getId(), fragment,
& makeFragmentName(container.getId(),
position));
原来他会先去FragmentManager里面去查找有没有相关的fragment如果有就直接使用如果没有才会触发fragmentpageadapter的getItem方法获取一个fragment。所以你更新的fragmentList集合是没有作用的,还要清除FragmentManager里面缓存的fragment。解决办法:在继承的fragmentpageadapter类里面添加这么一个方法
public void
setFragments(ArrayList fragments) {
& &if(this.fragments !=
FragmentTransaction ft = fm.beginTransaction();
for(Fragment f:this.fragments){
& ft.remove(f);
ft.commit();
fm.executePendingTransactions();
& this.fragments =
& notifyDataSetChanged();
就能完美的解决fragmentpageadapter数据刷新。
应同仁要求楼主贴出完整代码:
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
一个非常简单的Fragment,什么都没有,onCreateView只是填充了一个布局,我在MainActivity中尝试用FragmentManager去添加(包是统一的不存在V4的问题),也尝试了用xml布局的方式指定添加一个Fragment,都会出错.我把错误找重要的贴一下
Caused by: java.lang.IllegalArgumentException:
Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull,
parameter savedInstanceState
at com.wh.kotlinmap.ui.publicui.MyMapFragment.onCreateView(MyMapFragment.kt)
at android.app.Fragment.performCreateView(Fragment.java:2220)
我不太明白是哪里错误了.恳请大家在Kotlin的探索中给个灯.谢啦.
我刚才新建了一个Mode排除其他干扰.我是用新建Fragment的形式创建了Fragment,然后转成了Kotlin代码,只保留一个方法就是
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,savedInstanceState: Bundle): View? { return inflater.inflate(R.layout.fragment_blank, container, false) }
然后在Activity中用xml的形式去添加.果然还是这个错误.
是不是你的xml &fragment/&忘记加id了
现在已经得到解决.
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,savedInstanceState: Bundle?): View? { return inflater.inflate(R.layout.fragment_blank, container, false) }
根据错误分析
parameter savedInstanceState
checkParameterIsNotNull
分析可能是Fragement中的onCreatView方法的参数savedInstanceState为空.所以加一个?来进行空判断.
问题虽然解决了.但是为什么此时的savedInstanceState会是空的?因为没有保存吗?这个还有待大家回复.和指教.小弟先拜谢.
赞,你已经分析的很好了,Fragment 刚创建的时候没有保存的状态。有个疑问,重载方法参数可以不一致?标红线吗?
要回复问题请先或
Kotlin大海中的一只菜鹅
浏览: 1020
关注: 3 人私信发送成功
* 类描述:请求定位权限Fragment有需要定位权限功能的应用,在Actvity的布局中使用fragment标签,name设置为该
* 来的实现类即可,在回调方法中调用定位API即可
* 作者:xues
* 使用查看链接:/p/3459125aeca0
public abstract class BaseLocationFragment extends BaseFragment {
private static final int REQUEST_PERMISSION_LOCATION = 111;//定位权限请求码
private static final String mCancelTip = "需在手机设置中打开京东的位置信息权限。";//取消提示信息
* 第一步调用检查定位权限
public void checkLocationPermission() {
Context activity = getActivity();
//未获取权限
if (ContextCompat.checkSelfPermission(activity,
Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
//询问状态
if (shouldShowRequestPermissionRationale(Manifest.permission.ACCESS_FINE_LOCATION)) {
/*在Fragment中不能使用以下方式申请权限,否则,会接收不到结果
ActivityCompat.requestPermissions(getActivity(),
new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
REQUEST_PERMISSION_LOCATION);*/
new AlertDialog.Builder(getActivity())
.setMessage("为保证您正常地使用此功能,需要获取您的位置使用权限,请允许")//
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getActivity(), mCancelTip, Toast.LENGTH_SHORT).show();
dialog.dismiss();
.setPositiveButton("去允许", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
//在Fragment中申请权限
requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_PERMISSION_LOCATION);
dialog.dismiss();
* 禁止状态
* 注意:禁止状态调用申请权限的方法requestPermissions没反应,此时提示用户为什么要这个权限且跳转至应用信息页面,让用户开启权限
new AlertDialog.Builder(getActivity())
.setMessage("未取得您的位置信息使用权限,此功能无法使用。请前往应用权限设置打开权限")//
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getActivity(), mCancelTip, Toast.LENGTH_SHORT);
dialog.dismiss();
.setPositiveButton("去打开", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
//去应用信息页面
goToAppDetailSettingIntent(getActivity());
dialog.dismiss();
//已经允许
startLocation();
* 跳转到应用信息页面
* @param context
public static void goToAppDetailSettingIntent(Context context) {
Intent localIntent = new Intent();
localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
if (Build.VERSION.SDK_INT &= 9) {
localIntent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
localIntent.setData(Uri.fromParts("package", context.getPackageName(), null));
} else if (Build.VERSION.SDK_INT &= 8) {
localIntent.setAction(Intent.ACTION_VIEW);
localIntent.setClassName("com.android.settings", "com.android.settings.InstalledAppDetails");
localIntent.putExtra("com.android.settings.ApplicationPkgName", context.getPackageName());
context.startActivity(localIntent);
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case REQUEST_PERMISSION_LOCATION: {
if (grantResults.length & 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
startLocation();
* 在该方法中调用定位服务
public abstract void startLocation();
你可以在后,对此项目发表评论君,已阅读到文档的结尾了呢~~
无线局域网入侵检测技术研究,无线局域网,局域网入侵,win7创建无线局域网,无线局域网的安全性,4s无线局域网变wifi,什么是无线局域网,怎么入侵局域网电脑,怎么设置无线局域网,无线局域网变成wifi
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
无线局域网入侵检测技术研究
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口

我要回帖

更多关于 没有找到framedyn.dll 的文章

 

随机推荐