2012-03-15 10 views
1

同様の質問があります。Activity using ViewPager, PagerAdapter and AsyncTask causes a blank viewですが、私の問題はそれ以上です。ViewPager、ListView、およびAsyncTask、最初のページの空白、2番目のページのすべてのデータ

私はListViewを含むViewPagerを持っています。このListViewはasyncTaskによって設定されます。リストビューはデータを表示しますが、正しく表示されません。最初のページは常に空白で、2番目のページには両方のページデータが含まれています。

私は問題を引き起こしていたものが何もないことを確認するためにasynctaskを単純化しました。

@Override 
public Object instantiateItem(View pager, int position){ 
    // Log.d("PAGER", Integer.toString(position)); 
    ctx = pager.getContext(); 
    v = new ListView(ctx); 
    new CreateArrayListTask().execute(URLS[position]); 
    ((ViewPager)pager).addView(v, 0); 
    return v; 
} 

CreateArrayListTask

private class CreateArrayListTask extends AsyncTask<String, Void, ArrayList<String>> {    
    @Override 
    protected ArrayList<String> doInBackground(String... params) { 
    linkArray.add("Item 1"); 
    linkArray.add("Item 2"); 
    return linkArray; 
    } 

onPostExecute

protected void onPostExecute(ArrayList<String> linkArray) { 
    ArrayAdapter<String> a = new ArrayAdapter<String>(ctx, android.R.layout.simple_list_item_1, linkArray); 
    v.setAdapter(a); 

enter image description here

答えて

1

ListViewオンもう1つの質問ではmy answerが与えられているため、2番目のページは正確に二重に配置されています。

instantiateItemは現在アクティブなページに対してのみ呼び出されると仮定していますが、実際にはオフスクリーンページ用にプリロードするために実際に呼び出されます。ビューへの参照vは、instantiateItemへの2回目の呼び出しによって上書きされます。

は断片でそれを行う方法を一つの方法を表示するには、このプロジェクト例を見てください:https://github.com/antonyt/ListFragmentViewPagerExample/tree/master/src/com/example/listfragment

活動:

public class ListFragmentViewPagerActivity extends FragmentActivity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     ViewPager pager = (ViewPager) findViewById(R.id.pager); 
     pager.setAdapter(new ExamplePagerAdapter(getSupportFragmentManager())); 
    } 

    public class ExamplePagerAdapter extends FragmentPagerAdapter { 

    public ExamplePagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public int getCount() { 
     return 5; 
    } 

    @Override 
    public Fragment getItem(int position) { 
     Fragment fragment = new ExampleListFragment(); 

     // set arguments here, if required 
     Bundle args = new Bundle(); 
     // args.put(...) 
     fragment.setArguments(args); 

     return fragment; 
    } 
    } 
} 

フラグメント:

public class ExampleListFragment extends ListFragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    // normally you should inflate a view here and save references 
    // using ListFragment default layout for this example 
     return super.onCreateView(inflater, container, savedInstanceState); 
    } 

    @Override 
    public void onStart() { 
     super.onStart(); 
     new CreateArrayListTask().execute(); 
    } 

    private class CreateArrayListTask extends AsyncTask<String, Void, ArrayList<String>> { 
    @Override 
    protected ArrayList<String> doInBackground(String... params) { 
     ArrayList<String> linkArray = new ArrayList<String>(); 
     linkArray.add("Item 1"); 
     linkArray.add("Item 2"); 
     return linkArray; 
    } 

    protected void onPostExecute(ArrayList<String> linkArray) { 
     ArrayAdapter<String> a = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, linkArray); 
     setListAdapter(a); 
    } 
    } 

} 
+0

をお勧めあなたの他の回答に断片を使用して、私は彼らがどのように働くかあまりに精通していないので、私は前にフラグメントを使用してhavent。このような場合にフラグメントを使用する方法の例を挙げることができますか? – r2DoesInc

+0

@ r2DoesInc私は答えのサンプルプロジェクトを追加しました。 – antonyt