AsynctaskLoaderが複数回呼び出され、listfragmentに3つのアイテム(2つの重複)があります。(エンドレススクローラーを実装したいので、クリアしたくありません)。onLoadFinishedが呼び出されたときにアイテム(adapter.remove)を削除しても、2つのアイテム(1つは重複)が表示されます。adapter.clear onLoadFinishedを呼び出すと、1つのアイテムが表示されますが、エンドレススクローラーを実装できません。エンドレススクローラーは、新しいアイデアと新しいバンドルでローダーを呼び出すことによって実装されます。
public class ArticlePreviewAdapter extends ArrayAdapter<ArticlePreview> {
private final LayoutInflater inflater;
private final ImageUpdater imageUpdater;
public ArticlePreviewAdapter(Context context, ImageUpdater imageUpdater) {
super(context, android.R.layout.simple_list_item_1);
android.util.Log.d("SCROLL", "ArticlePreviewAdapter.ArticlePreviewAdapter" );
this.inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this.imageUpdater = imageUpdater;
}
public void setData(ArticlePreview data) {
//clear();
if (data != null) {
add(data);
//this.add(data);
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view;
if (convertView == null) {
view = inflater.inflate(R.layout.article_preview, parent, false);
}
else {
view = convertView;
}
ArticlePreview articlePreview = getItem(position);
android.util.Log.d("SCROLL", "ArticlePreviewAdapter.getView pos: " + position);
((TextView) view.findViewById(R.id.article_preview_title)).setText(articlePreview.getTitle());
((TextView) view.findViewById(R.id.article_preview_info)).setText(articlePreview.getInfo());
ImageView imageView = ((ImageView) view.findViewById(R.id.article_preview_image));
Bitmap bitmap = this.imageUpdater.accessDirectly(articlePreview.getImageLink());
if (bitmap != null) {
imageView.setImageBitmap(bitmap);
}
else {
this.imageUpdater.add(new ImageViewWebUpdate(view.hashCode(),
imageView, 100, 75, articlePreview.getImageLink()));
}
return view;
}
}
ローダークラス
public class ArticlePreviewLoader extends AsyncTaskLoader<List<ArticlePreview>>
{
private String type;
private String nid;
private String start;
private String end;
private List<ArticlePreview> data;
public ArticlePreviewLoader(Context context, Bundle args)
{
super(context);
this.type = (String) args.get("type");
this.nid = (String) args.get("nid");
this.start = (String) args.get("start");
this.end = (String) args.get("end");
}
/**
* load JSON data, parse it and return.
*/
@Override
public List<ArticlePreview> loadInBackground()
{
android.util.Log.d("LOAD", "ArticlePreviewLoader.loadInBackground");
// even if fail return empty list and print exception stack trace
LinkedList<ArticlePreview> list = new LinkedList<ArticlePreview>();
URL url;
HttpURLConnection httpURLConnection = null;
--
android.util.Log.d("LOAD", "ArticlePreviewLoader.loadInBackground return");
return Collections.unmodifiableList(list);
//return list;
}
@Override
protected void onStartLoading()
{
if (data != null)
deliverResult(data);
if (takeContentChanged() || data == null)
forceLoad();
}
@Override
protected void onStopLoading()
{
//super.onStopLoading();
cancelLoad();
}
@Override
protected void onReset()
{
super.onReset();
onStopLoading();
data = null;
}
}
助けていただければ幸いです。私は今一日これに固執しています。
編集
マニフェストコード:
<uses-sdk
android:minSdkVersion="13"
android:targetSdkVersion="16" />
<uses-permission android:name="android.permission.INTERNET" />
<!-- Permission to write to external storage -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".SplashActivity"
android:label="@string/title_activity_splash" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".LoginActivity"
android:label="@string/title_activity_login" >
</activity>
<activity
android:name=".ArticleForumActivity"
android:label="@string/title_activity_article_forum" >
</activity>
</application>
</manifest>