나에게 로더가 여러 개인 경우 올바른 커서를 얻는 방법이 명확하지 않습니다. 다음을 사용하여 두 개의 다른 로더를 정의한다고 가정 해 보겠습니다.
getLoaderManager().initLoader(0,null,this);
getLoaderManager().initLoader(1,null,this);
그런 다음 onCreateLoader () 에서 ID에 따라 다른 작업을 수행합니다.
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle arg1) {
if (id==0){
CursorLoader loader = new CursorLoader(getActivity(),
MaterialContentProvider.CONTENT_URI,null,null,null,null);
}else{
CursorLoader loader = new CursorLoader(getActivity(),
CustomerContentProvider.CONTENT_URI,null,null,null,null);
};
return loader;
}
여태까지는 그런대로 잘됐다. 그러나 올바른 Cursoradapter에 대한 올바른 커서를 식별하는 ID를 얻지 못하기 때문에 onLoadFinished () 에서 올바른 커서를 얻는 방법 .
@Override
public void onLoadFinished(Loader<Cursor> arg0, Cursor cursor) {
mycursoradapter1.swapCursor(cursor);
if(isResumed()){
setListShown(true);
}else {
setListShownNoAnimation(true);
}
}
//and where to get the cursor for mycursoradapter2
또는 내가 틀렸고 이것은 하나의 조각에서 두 개의 다른 커서 어댑터에 대한 결과를 얻는 잘못된 방법입니다.
이것은 정말 좋은 질문입니다! 잘 묻고 상당히 미묘한 주제를 다룹니다. 매우 구체적입니다.
—
Kurtis Nusbaum 2011 년
당신이 언급되어야 이 로더 반환 형식이 있기 때문에, 제네릭 형식의 삭제로 인해 모든 로더에 걸쳐 동일하지 않습니다 때마다, 자바는 (인터페이스를 구현하는 것을 허용하지 않습니다 별도의 핸들러 클래스를 사용하는
—
Matthias
LoaderCallbacks
것보다 더으로이 경우에는) 유형. 두 경우 모두 결과가 Cursor
.
@Matthias 당신이 그것을 언급했습니다! 반환 유형이 다른 2 개의 로더를 사용하는 방법을 고려 중입니다. 2 개의 다른 반환 유형을 가진 2 개의 로더가 있다면 어떨까요? 하나의 로더로 한 작업을 수행하고 대신 스레드로 다른 작업을 수행합니까?
—
Robert
@Robert 스레드를 사용할 필요가 없습니다. 두 개의
—
AnV
Loader
s를 사용할 수 있습니다 . 이 stackoverflow.com/a/20839825/2818583