我有一个使用FrameLayout
与屏幕分割成左侧导航和右侧的内容面板主要活动。左侧面板用于导航,将不同的布局加载到右侧面板(称为contentLayout
),该面板可以粘贴多个布局。我在onItemClickListener
s的左侧导航面板中有ListView
。在他们分开onItemClick
方法,我用contentLayout.removeAllViews()
然后夸大他们的布局,像这样:一个ListView控件,第二布局不更新
private final OnItemClickListener redListener = new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
contentLayout.removeAllViews();
if (myFirstClassLayout == null) {
myFirstClassLayout = FirstClassLayout.getLayout(
layoutInflater,
MyActivity.this,
resources,
new ArrayList<String>(),
new ArrayList<Desc>()
);
}
CommonClass.updateListeners();
if (FirstClassLayout != null) contentLayout.addView(myFirstClassLayout);
}
};
private final OnItemClickListener blueListener = new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
contentLayout.removeAllViews();
if (mySecondClassLayout== null) {
mySecondClassLayout = SecondClassLayout.getLayout(
layoutInflater,
MyActivity.this,
resources,
new ArrayList<String>(),
textList,
new ArrayList<Desc>(),
hash
);
}
CommonClass.updateListeners();
if (SecondClassLayout != null) contentLayout.addView(mySecondClassLayout);
}
};
在这两个FirstClassLayout
和SecondClassLayout
,我吹一个ThirdClassLayout
包含动态ListView
(姑且称之为commonListView
),使得使用的一个ArrayAdapter<String>
。 ListView
是一个listChoiceIndicatorSingle
样式视图,这意味着它在每个列表项右侧显示一个类似单选按钮的图标。
当应用程序启动时,正确的内容面板为空。如果我触发了redListener
或blueListener
,它将在右侧的内容面板中显示commonListView
,但未选择任何列表项目。如果我先触发红色,然后触发蓝色,然后在commonListView
中进行选择,则更改会反射回FirstClassLayout
,这太棒了!然而,当我继续通过选择commonListView
从FirstClassLayout别的东西,然后触发blueListener
去SecondClassLayout
,在SecondClassLayout
的commonListView
并不反映我的选择。相反,当我最后一次使用SecondClassLayout
时,它卡在我选择的项目上。
出现这种情况,如果我执行相反的顺序测试,所以根据我上次触发该听众,去年听众和布局将有超过两种布局适当的UI synching控制。我首先触发的那个似乎只能控制自己。我需要两个听众能够在任何给定时间在两个布局上显示完全相同的ListView
选定项目。
的commonListView
从去年布局先布局synching通过CommonClass.updateListeners()
实现其作用:
adapter.clear();
for (String title: statusSet) adapter.add(title);
adapter.notifyDataSetChanged();
commonListView.setItemChecked(positionOfItemChecked, true);
Log.i(TAG, "position checked = " + positionOfItemChecked);
adapter.notifyDataSetChanged();
由于这一工程从去年布局触发首先,我想这必须与一个UI刷新问题,但我到处搜寻了一个很好的解决方案并尝试了所有建议。 0123'语句在LogCat
中为第一个或最后一个布局触发正确输出,所以我知道它正确地打上了代码。我只是不明白为什么第一个无法控制最后一个。我已经试过:
commonListView.invalidate();
((BaseAdapter) commonListView.getAdapter()).notifyDataSetChanged();
和AsyncTask
和其他几个人,但似乎没有什么上刷新的第一个布局,使其第二匹配工作。有没有人遇到过这样的问题?有谁知道如何解决或解决这个问题?
我刚刚在contentLayout.addView里面加了同样的if块。在if区块外面试过它。第二个布局的问题仍然不清晰。 – jdynamite 2012-07-31 14:09:59