FrameLayout
을 사용하는 주 활동이 있습니다. 화면은 왼쪽 탐색 패널과 오른쪽 내용 패널로 나뉩니다. 왼쪽 패널은 여러 레이아웃을 함께 붙일 수있는 오른쪽 패널 (contentLayout
)에 다른 레이아웃을로드하는 탐색에 사용됩니다. 왼쪽 탐색 패널에 ListView
이 onItemClickListener
과 함께 있습니다. 각자의 onItemClick
방법, 난과 같이 자신의 레이아웃을 부풀려 다음 contentLayout.removeAllViews()
를 사용 : 나는이 포함 된 ThirdClassLayout
팽창두 개의 레이아웃에서 하나의 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
모두에서 동적 ListView
의 사용을 만드는 (의이 commonListView
를 호출하자) ArrayAdapter<String>
. ListView
은 listChoiceIndicatorSingle
스타일보기입니다. 즉, 각 목록 항목의 오른쪽에 라디오 버튼 모양의 아이콘이 표시됩니다.
앱이 시작되면 올바른 콘텐츠 패널이 비어 있습니다. redListener
또는 blueListener
을 실행하면 올바른 콘텐츠 패널에 commonListView
이 표시되고 목록 항목이 선택되지 않습니다. 빨간색을 먼저 트리거 한 다음 파란색을 트리거 한 다음 commonListView
에서 선택하면 변경 사항은 FirstClassLayout
으로 다시 반영됩니다. 그러나 해당 FirstClassLayout에서 commonListView
의 다른 항목을 선택하고 blueListener
을 SecondClassLayout
으로 이동하면 SecondClassLayout
의 commonListView
에 방금 선택한 항목이 반영되지 않습니다. 대신, 제가 마지막으로 SecondClassLayout
에있을 때 선택한 항목에 붙어 있습니다.
역순으로 테스트를 수행하면 마지막 청취자에 따라 마지막 청취자와 레이아웃이 두 레이아웃에 대해 적절한 UI 동기화 제어를 갖게되므로이 경우가 발생합니다. 내가 방아쇠를 당기는 것은 스스로를 통제 할 수있는 것처럼 보인다. 두 청취자가 주어진 시간에 두 레이아웃 모두에서 정확히 동일한 ListView
선택한 항목을 표시 할 수 있어야합니다.
첫번째 레이아웃 마지막 레이아웃에서 commonListView
의 맞추지는 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를 새로 고침 문제와 관련되어야한다 그림 , 그러나 나는 좋은 해결책을 찾기 위해 모든 곳을 수색하고 모든 제안을 시도했다. Log.i
문은 트리거 된 첫 번째 또는 마지막 레이아웃에 대해 LogCat
에 올바르게 인쇄되므로 코드가 제대로 실행되고 있음을 알 수 있습니다. 나는 왜 첫 번째 것이 마지막 것을 통제 할 수 없는지 이해하지 못한다.
commonListView.invalidate();
((BaseAdapter) commonListView.getAdapter()).notifyDataSetChanged();
및 AsyncTask
여러 다른,하지만 아무것도는 두 번째 일치하도록 첫 번째 레이아웃을 새로 고치는 작업을 것 같았다 : 나는 시도했습니다. 누구든지 그런 문제가 발생 했습니까? 누구든지이 문제를 해결하거나이 문제를 해결하는 방법을 알고 있습니까?
같은 if 블록 안에있는 contentLayout.addView 다음에 추가했습니다. if 블록 바로 밖에서 시도해 보았습니다. 여전히 두 번째 레이아웃에서 동일한 문제가 발생하지 않습니다. – jdynamite