내 생각은 AsyncTask 안에 새 조각을 만든 다음 onPostExecute에 표시되는 진행률 표시 줄 조각으로 바꿉니다. 내 문제는 프래그먼트가 절대로 바뀌지 않으므로 진행 막대 조각으로 유지된다는 것입니다. 이 일을 할 수 없습니까? 나쁜 접근입니까? DetailFragment 내부에 진행률 막대를 표시해야합니까? (진행 막대가있는 파편이 많을 것입니다.)배경 스레드 내 조각을 바꿀 수 있습니까
@Override
protected void onStart() {
super.onStart();
getSupportFragmentManager().beginTransaction()
.replace(R.id.content_frame, new ProgressBarFragment()).commit();
TestSwapFragment d = new TestSwapFragment();
d.execute(data);
}
class TestSwapFragment extends AsyncTask<FragmentData, Void, MyFragment> {
FragmentData data = null;
@Override
protected MyFragment doInBackground(FragmentData... params) {
try {
Thread.sleep(15000); // Simulate the long running method below
} catch (InterruptedException e) {
e.printStackTrace();
}
this.data = params[0];
DetailFragment df= new DetailFragment();
df.ExecuteFragment(this.data); // Long running
return df;
}
@Override
protected void onPostExecute(MyFragment result) {
super.onPostExecute(result);
if (this.data.Position == FragmentPosition.PaneOne)
getSupportFragmentManager().beginTransaction()
.replace(R.id.content_frame, result).commit();
else
getSupportFragmentManager().beginTransaction()
.replace(R.id.content_frame2, result).commit();
}
}
왜 데이터 parcelable을하는 것이 중요합니다 도움이되기를 바랍니다? (다시 작성한 후 특정 클래스를 전달해야한다는 것을 알았습니다.) 왜 setData() 메소드를 작성하지 않고 변수를 설정해야합니까? MyData _data; .. 공공 무효의 setData (MyData 데이터) {_ 데이터 = 데이터; } – Patrick
나는 대답했다. 이것은 프래그먼트 수명주기 때문입니다. 프래그먼트 객체가 파괴되었지만 나중에 시스템에서 동일한 프래그먼트 (다시 버튼, 회전, 이미 관리자의 레이아웃 조각에 추가 등)가 필요한 경우 시스템은 동일한 번들을 프래그먼트로 전달하여 재 구축 할 수 있습니다 . 이와 같은 함수를 작성하는 경우에는 이런 일이 발생하지 않으며 조각에는 해당 조건에 대해 null 데이터가 있습니다. – Budius