問題の説明: SQLite データベースによって取り込まれたサムネイルを含む記事のスクロール可能なリストを作成しています。一般に、遅いことを除いて「機能」しています。
画像の読み込みが非常に遅い...「Universal Image Loader」を使用すると、画像がデバイスにキャッシュされ、すでに表示されている場合(または少なくともそれに近い場合)、スクロールして表示されるように見えると思いました)。しかし、上下にドラッグすると、画像が何も表示されず、3〜5秒後に画像が飛び出し始めます(再ダウンロードしているように)
その場でサムネイルボックスの可視性を変更していますが、それは問題なく機能しています-変更されているようには見えません-スクロールして表示されるかどうか、点滅などはありません. (ただし、その後、画像はさらに数秒間表示されません)。
スクロールした後にphpスクリプトを削除してテストしました...前のスポットにスクロールして戻ると、画像が表示されません-毎回PHPスクリプトからロードされていると思います。
しかし、ドキュメントによると: 「UsingFreqLimitedMemoryCache(キャッシュサイズの制限を超えると、使用頻度の最も低いビットマップが削除されます)-デフォルトで使用されます」
詳細:
私ArticleEntryAdapter.js
は持っています:
@Override
public View getView(final int position, final View convertView, final ViewGroup parent) {
// We need to get the best view (re-used if possible) and then
// retrieve its corresponding ViewHolder, which optimizes lookup efficiency
final View view = getWorkingView(convertView);
final ViewHolder viewHolder = getViewHolder(view);
final Article article = getItem(position);
// Set the title
viewHolder.titleView.setText(article.title);
//Set the subtitle (subhead) or description
if(article.subtitle != null)
{
viewHolder.subTitleView.setText(article.subtitle);
}
else if(article.description != null)
{
viewHolder.subTitleView.setText(article.description);
}
ImageLoader imageLoader = ImageLoader.getInstance();
imageLoader.displayImage("", viewHolder.thumbView); //clears previous one
if(article.filepath != null && article.filepath.length() != 0) {
imageLoader.displayImage(
"http://img.sltdb.com/processes/resize.php?image=" + article.filepath + "&size=100&quality=70",
viewHolder.thumbView
);
viewHolder.thumbView.setVisibility(View.VISIBLE);
} else {
viewHolder.thumbView.setVisibility(View.GONE);
}
return view;
}
画像が間違っている限り - 頻繁ではありませんが、スクロール中に同じ画像が 2 つ表示され、記事を見るとまったく関連していないことがあります (つまり、実際に同じ画像) だから - 私はそれから離れてスクロールし、戻って、それはもはや間違った画像ではありません.
注: 私は Java/Android を初めて使用します。おそらく、すでに気付いているでしょう。
コメントリクエストごとの追加コード:
private View getWorkingView(final View convertView) {
// The workingView is basically just the convertView re-used if possible
// or inflated new if not possible
View workingView = null;
if(null == convertView) {
final Context context = getContext();
final LayoutInflater inflater = (LayoutInflater)context.getSystemService
(Context.LAYOUT_INFLATER_SERVICE);
workingView = inflater.inflate(articleItemLayoutResource, null);
} else {
workingView = convertView;
}
return workingView;
}
更新: 私のマニフェストファイルには次のものがあります:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
しかし、私が見つけたキャッシュ フォルダーは完全に空です。
mnt
-sdcard
-Android
-data
-com.mysite.news
-cache
-uil-images