0

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>
4

2 に答える 2

1

Set代わりに使用してくださいList<ArticlePreview> data

于 2012-11-27T07:11:26.903 に答える
0

@Yahor10が言ったことをやりました。ローダーでのデータ検証と、クラスlistfragmentのメソッドonActivityCreatedでのadapter.cleadの呼び出し

于 2012-11-27T07:06:07.257 に答える