The*_*ter 11 android listview android-appcompat android-fragments
listeners片段中的其他元素没有被初始化.(比如FAB).唯一正常运行的东西是内置的任何东西adapter(即ListView行)问题:打开导航抽屉,单击列表项打开一个新Fragment的同一个Activity.再次打开导航抽屉,单击应该简单替换现有的相同项目,Fragment当Fragment打开时,所有以Java编程设置的元素(文本,颜色,侦听器)都不会更改/添加到Fragment.视图只是默认xml布局.我已经证实了Log.d这,设置这些东西的代码是正在运行的时间.(如果你打开一个不同的Fragment,然后回到原来的,一切正常)
确认原因: 更改此内容时:
compile "com.android.support:appcompat-v7:25.0.1"
compile 'com.android.support:design:25.0.1'
Run Code Online (Sandbox Code Playgroud)
至
compile "com.android.support:appcompat-v7:25.1.0"
compile 'com.android.support:design:25.1.0'
Run Code Online (Sandbox Code Playgroud)
(如果只更改了其中一个库,那么哪个库仍然无关紧要)
我已经确认更改这两个库是问题(在第二个应用程序中也确认了这个问题 - 并且仅更改此代码,具有完全相同的结果)
我的问题是,为什么会发生这种情况以及如何解决?
原始问题的代码和更详细的描述:
FragmentTransaction tItems = fm.beginTransaction();
ListFragment mFrag = new PlannerFragment();
tItems.replace(R.id.main_frag, mFrag, TAG_CALC_FRAGMENT);
tItems.commit();
Run Code Online (Sandbox Code Playgroud)
我的抽屉里有大约4个选项都可以打开这个片段,但在每个选项之前,我设置了一个像这样的全局变量:
MyApp.PlanType = "highbal";
MyApp.PlanType = "lowbal";
etc.
Run Code Online (Sandbox Code Playgroud)
基于PlanType值(上面),Fragment加载了不同的数据(但是,在完全相同的xml布局中).它只是ListView一个标题.
这个Fragment,(PlannerFragment)第一次加载正常.
当我点击另一个相同的项目(不同的PlanType)时Fragment(上面执行的代码相同):ListView实际列表中的加载正常. 但是在header列表中,没有一个setText()值正确设置新数据.它使用我的xml布局中的默认值.
现在,如果我加载不同的Fragment东西,一切都很好.只有当我添加或替换(我已经尝试过两者)时,Fragment才会发生这种情况.
这是顶部的标题代码 PlannerFragment
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// Setup listview
lv = getListView();
LayoutInflater inflaterHeader = getActivity().getLayoutInflater();
ViewGroup header = (ViewGroup) inflaterHeader.inflate(R.layout.planner_listview_header, lv, false);
lv.addHeaderView(header, null, false);
// Load Data then Set Textviews, e.g.:
TextView title = (TextView) getActivity().findViewById(R.id.tvPlannerTitle);
dateOutput = (TextView) getActivity().findViewById(R.id.tvDebtOutDate);
Run Code Online (Sandbox Code Playgroud)
如果我添加到该代码,dateOutput.setText("test");它不会发生.我可以执行一个Log.d和我的数据寄存器,因此正在读取此代码,但未设置UI.
我甚至尝试Fragment用支票删除第一个这样的:
Fragment fragment = fm.findFragmentByTag(TAG_CALC_FRAGMENT);
if(fragment != null)
fm.beginTransaction().remove(fragment).commit();
Run Code Online (Sandbox Code Playgroud)
这没有效果.
同样,这只发生在我更改上面的库时.这是库中的错误还是现在响应不同?
Hug*_*sse 12
appcompat 25.1.0上的片段有许多变化和问题.第一个似乎与您的问题有关,但下一个应该被阅读,因为它可能很重要.
替换在appCompat 25.1.0中无法正常工作
当前状态(2017年1月4日):错误已分配
问题链接
onStart on new Fragment在onStop之前调用前一个
当前状态:按预期工作.对我来说,它可能是app compat 25.0.x Issue链接的重大变化
在片段中调用两次resume事件也存在问题,请参见此处.
TLDR.也许最好的临时解决方案是在新版本发布之前不使用25.1.0.