listeners
和其他元素未被初始化。 (比如FAB' s)。唯一正常运行的是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'
到
compile "com.android.support:appcompat-v7:25.1.0"
compile 'com.android.support:design:25.1.0'
(如果这些库中只有一个被更改了,那么问题并不重要,问题仍然存在)
我已经确认更改这两个库是问题(在第二个应用中也确认了这个问题 - 并且仅更改 此代码,具有完全相同的结果)
我的问题是,为什么会发生这种情况以及如何解决?
代码和原始问题的更详细说明:
FragmentTransaction tItems = fm.beginTransaction();
ListFragment mFrag = new PlannerFragment();
tItems.replace(R.id.main_frag, mFrag, TAG_CALC_FRAGMENT);
tItems.commit();
我的抽屉里有大约4个选项都打开了这个片段,但在每个片段之前,我设置了一个这样的全局变量:
MyApp.PlanType = "highbal";
MyApp.PlanType = "lowbal";
etc.
基于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);
如果我添加到该代码,dateOutput.setText("test");
就不会发生这种情况。我可以执行Log.d
和我的数据寄存器,因此正在读取此代码,但未设置UI。
我甚至尝试使用支票首先删除Fragment
:
Fragment fragment = fm.findFragmentByTag(TAG_CALC_FRAGMENT);
if(fragment != null)
fm.beginTransaction().remove(fragment).commit();
这没有效果。
同样,这只发生在我更改上面的库时。这是库中的错误还是现在响应不同?
答案 0 :(得分:12)
appcompat 25.1.0上有很多更改和碎片问题。第一个似乎与您的问题有关,但下一个应该被阅读,因为它可能很重要。
替换在appCompat 25.1.0中无法正常工作
当前状态(2017年1月4日):错误已分配
Issue link
onStart on new Fragment在之前的onStop之前被调用
当前状态:按预期工作。对我而言,它可能是app compat 25.0.x的重大变化
Issue link
片段中的恢复事件有两次也存在问题,请参阅here。
TLDR。也许最好的临时解决方案是在新版本发布之前不使用25.1.0。
答案 1 :(得分:3)
您可以在 CREATE TABLE #tt(col1 INT,col2 INT,col3 int)
INSERT INTO #tt
EXEC sp_MSforeachtable 'select * from ? where col1=''1'' and OBJECT_ID(''?'') in (OBJECT_ID(''table1''),OBJECT_ID(''table1''),OBJECT_ID(''table1'')) '
SELECT * FROM #tt
方法中添加list_view_header.xml
,并更改所选项目的位置,例如navigationDrawer()
。
selectItem(position - 1)