0

私はAndroidでの使用ViewPagersに不慣れです。Fragments私のアプリの最初のアクティビティにはがあり、その後、最初のアクティビティから渡されたIDに基づいてListView基本的にフィルタリングされた別のアクティビティに移動します。ユーザーがフィルター処理された異なるものの間をスワイプできるようにしたいと思います。おそらく私の一般的な理解不足ですが、機能は正常に機能していますが、フィルター処理されたアイテムをクリックすると、メンバー変数として格納している値のコレクションがあるため、エラーがスローされます。クラス全体の参照とコレクションは、を使用すると常に空になります。ListViewListViewListViewsViewPagerListViewViewPager

これは私がこれまでに持っているコードです:

ListingFragment.class:

public class ListingFragment extends SherlockFragmentActivity
{
    private ViewPager mViewPager;  
    private MyFragmentPagerAdapter mMyFragmentPagerAdapter; 
    private static List<Fragment> fragments;

    @Override
    public void onCreate(final Bundle icicle)
    {    
        super.onCreate(icicle);

        setContentView(R.layout.main);

        mViewPager = (ViewPager)findViewById(R.id.viewpager);  
        mMyFragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager());  
        mViewPager.setAdapter(mMyFragmentPagerAdapter);

        DetailsFragment df1 = DetailsFragment.newInstance(1);
        fragments.add(df1);

        DetailsFragment df2 = DetailsFragment.newInstance(2);
        fragments.add(df2);
    }

    private static class MyFragmentPagerAdapter extends FragmentPagerAdapter {  

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

        @Override  
        public Fragment getItem(int index) {  

            return fragments.get(index);
        }  

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

DetailsFragment.class

public class DetailsFragment extends SherlockFragmentActivity
{
    private int detailId;
    private static List<Integer> items;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);         
    }

    @Override
    public void onActivityCreated(final Bundle icicle)
    {    
        super.onActivityCreated(icicle);
    }

    public static DetailsFragment newInstance(int id) {

        DetailsFragment lf = new DetailsFragment();
        Bundle bundle = new Bundle();
        bundle.putInt("id", id);
        lf.setArguments(bundle);
        return lf;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.listing, container, false);

        detailId = getArguments().getInt("id");         

        items = GetItems();

        return view;
    }

    @Override
    public void onListItemClick(ListView l, View v, int position, long id)
    {
        super.onListItemClick(l, v, position, id);

        final Integer item = items.get(pos); //this is always empty
    }
}
4

2 に答える 2

0

int位置をonListItemClick()メソッドに渡しますが、get()メソッドではposを使用します。交換してみてください

final Integer item = items.get(pos);

final Integer item = items.get(position);
于 2013-01-17T19:30:37.230 に答える
0

コードに問題がありますが、機能するはずです。

あなたの名前を確認してください、あなたは(それがそれならあなたはひどい名前を選んだ)ように見える拡張を持っていますそしてあなたはまた同じListingFragmentように見える拡張を持っていますSherlockFragmentActivityActivityActivityDetailsFragmentSherlockFragmentActivityFragment

アダプターのフラグメントのリストは使用しないでくださいViewPager。これは最初は機能しますが、電話を回転させると問題が発生します。リストを使用することはできますが、アダプターに特定の変更を加える必要があります。

アダプタの両方のページにitems static 同じクラスを使用するため、リストは常に。によって返される最後の結果を指すため、作成しないでください。DetaildFragmentitemsGetItems()

最後に、items問題に関して、例外を除いてスタックトレースを共有できますか?GetItemsすべてのデータを含む有効なリストが返されるかどうかをテストしましたか?

于 2013-01-17T19:55:22.783 に答える