안녕하세요 미안합니다. 초보자 용이지만 진도 막대가있는 조각에서 asynctask를 사용하는 데 정말로 어려움이 있습니다. 특히 중첩 된 조각을 사용하여 회전 할 때 특히 그렇습니다. setretaininstance (참), 내가조각에서 asynctask를 사용하여 진행 막대가있는 데이터베이스를로드합니다.
이 작동하는 것 같다public class OneFragment extends fragment {
private WeakReference<MyAsyncTask> asyncTaskWeakRef;
}
private void startNewAsyncTask() {
MyAsyncTask asyncTask = new MyAsyncTask(this);
this.asyncTaskWeakRef = new WeakReference<MyAsyncTask >(asyncTask);
asyncTask.execute();
}
public void showProgressBar() {
ProgressBar progress = (ProgressBar)getActivity().findViewById(R.id.progressBarFetch);
progress.setVisibility(View.VISIBLE);
progress.setIndeterminate(true);
}
public void hideProgressBar() {
ProgressBar progress = (ProgressBar)getActivity().findViewById(R.id.progressBarFetch);
progress.setVisibility(View.GONE);
}
private class MyAsyncTask extends AsyncTask<Void, Void, Void> {
private WeakReference<OneFragment> fragmentWeakRef;
private MyAsyncTask (OneFragment fragment) {
this.fragmentWeakRef = new WeakReference<OneFragment>(fragment);
}
@Override
protected void onPreExecute() {
super.onPreExecute();
showProgressBar();
}
@Override
protected Void doInBackground(Void... params) {
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(getActivity(), "ADD_NEW_CARD", null);
SQLiteDatabase db = helper.getWritableDatabase();
DaoMaster daoMaster = new DaoMaster(db);
DaoSession daoSession = daoMaster.newSession();
addNewCardDao leaseDao = daoSession.getAddNewCardDao();
QueryBuilder qb = leaseDao.queryBuilder();
SharedPreferences sharedPreferences = PreferenceManager
.getDefaultSharedPreferences(getActivity());
// Create a new boolean and preference and set it to true
prefString = sharedPreferences.getString("ICONS SELECTED","ORIGINAL");
switch (prefString){
case "ORIGINAL":
leaseList.clear();
String[] strings1 = {"ORIGINAL", "USER"};
qb.where(addNewCardDao.Properties.CardIconType.in(strings1),
qb.and(addNewCardDao.Properties.Type_of_type.eq("PEOPLE"),
addNewCardDao.Properties.Type_of_word.eq("NOUNS")));
leaseList = qb.list();
db.close();
break;
case "SIMPLE":
leaseList.clear();
String[] strings2 = {"SIMPLE", "USER"};
qb.where(addNewCardDao.Properties.CardIconType.in(strings2),
qb.and(addNewCardDao.Properties.Type_of_type.eq("PEOPLE"),
addNewCardDao.Properties.Type_of_word.eq("NOUNS")));
leaseList = qb.list();
db.close();
break;
case "PHOTOS":
leaseList.clear();
String[] strings3 = {"PHOTOS", "USER"};
qb.where(addNewCardDao.Properties.CardIconType.in(strings3),
qb.and(addNewCardDao.Properties.Type_of_type.eq("PEOPLE"),
addNewCardDao.Properties.Type_of_word.eq("NOUNS")));
leaseList = qb.list();
db.close();
break;
}
return null;
}
@Override
protected void onPostExecute(Void response) {
super.onPostExecute(response);
if (this.fragmentWeakRef.get() != null) {
hideProgressBar();
CardAdapterDB cardAdapterDB = new CardAdapterDB(leaseList);
recyclerView.setAdapter(cardAdapterDB);
cardAdapterDB.notifyDataSetChanged();
}
}
}
아래에 있지만 진행률 막대 널 포인터 오류와 회전 충돌에 내 접근 방식의 결과 this 빠른 자습서 다음 시도는 그래서는 진행 막대가 (보기 getActivity를 찾아 변경 시도) 내가 내보기를 부풀게하는 방법 thats 때문에 rootView를 호출
View rootView = inflater.inflate(R.layout.fragment_one, container, false);
조각이 부착 된 후
하지만이 나던은 널 포인터하지만 응용 프로그램이 시작되기 전에이 시간 다시 충돌 작동하지만 난 확실히 내 레이아웃이 진행 막대를 가지고는
<ProgressBar
android:id="@+id/progressBarFetch"
style="?android:attr/progressBarStyleLarge"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:indeterminate="true" />
메신저 단지를 참조하려고 내 생각에, 나는이 모든 변경이 모두 동일한 레이아웃을 사용하여 동일한 쿼리를 사용하여 동일한 데이터베이스에서로드하는 많은 조각을 필요로하므로 비동기 및 진행률 막대에 대해 정적 메서드를 만드는 것이 더 좋습니다. 각 조각 및 중첩 된 단편의 방향을 처리하는 방법은 무엇입니까?
can anyone 이걸 가지고 올바른 방향으로 나를 가리 키거나 실종 된 것을 지적 해주세요.
그보다 좋은 블로그 게시물은 중첩 된 조각에 대해서는 언급하지 않았지만 주위를 둘러 보니 정말 도움이 될 것이라고 생각합니다. –
당신은 건강합니다. – Stanojkovic