浏览器内部的listviews同步

时间:2014-03-05 09:12:25

标签: android listview android-fragments

嗨我得到了viewpager:在[A]和[B]中包含一个有两个不同视图的片段。两个视图都包含列表视图。当我滚动,列表视图[A]并切换到第二个片段我想要列表视图[B]也滚动相同的数量。我搜索过我可以将onTouchListener设置为listview.please,在我使用的代码下方找到。

viewpager adapter

public class ViewPagerAdapter extends FragmentStatePagerAdapter implements
        CurrencyScrollListener {

    private String nBankName;
    private List<Currency> list;
    private String mycode;
    private CurrencyViewPager[] mFragments = new CurrencyViewPager[2];
    private int mCurrentScrollPosition;

    @Override
    public int getItemPosition(Object object) {
        // TODO Auto-generated method stub
        return super.getItemPosition(object);

    }

    public CurrencyViewPager getCurrencyFragment(int index) {
        CurrencyViewPager pager = mFragments[index];
        CurrencyViewPager other = mFragments[1-index];

        if (pager == null) {
            if (index == 0) {
                pager = new CurrencyViewPager(list, nBankName, true, mycode,
                        this, 0);
            } else {
                pager = new CurrencyViewPager(list, nBankName, false, mycode,
                        this, 1);
            }
            mFragments[index] = pager;

        }

        if(other!=null && other.getCurrentPosition() != pager.getCurrentPosition()) {
            pager.scrollTo( other.getCurrentPosition() );
        }

        return pager;
    }

    public ViewPagerAdapter(FragmentManager fm, List<Currency> currencyList,
            String name, String code) {
        super(fm);
        this.list = currencyList;
        this.nBankName = name;
        this.mycode = code;

    }

    @Override
    public Fragment getItem(int item) {
        Log.i("ViewPagerAdapter","Currency Fragment #"+item);
        return getCurrencyFragment(item);

    }

    @Override
    public int getCount() {

        return 2;
    }





    }

}

包含列表视图的单个片段

public class CurrencyViewPager extends BaseFragment {

    private ListView mcurrencyListview;
    private GeoCurrencyService mCurrency = GeoCurrencyService.getInstance();
    ButtonPressListener buttonListener;
    private CurrencyAdapter mCurrencyAdapter;
    private String bankName;
    private boolean checkFlag;
    private ProgressBar mCurrencyProgress;
    private TextView mCurrencyLoading;
    private List<Currency> mList;
    private String recCode;
    private static int Firstposition;
    private final CurrencyScrollListener listener;
    private final int mListViewIndex;



    // constructor
    public CurrencyViewPager(List<Currency> myList, String name, boolean flag,String code, CurrencyScrollListener listener, int listViewIndex) {
        super();
        this.mList = myList;
        this.bankName = name;
        this.checkFlag = flag;
        this.recCode = code;
        this.listener = listener;
        this.mListViewIndex = listViewIndex;
    }

    // interface

    public interface ButtonPressListener {
        public void onListItemPressed(Currency object, String name,String code);
    }

    // attach on listener

    public void onAttach(Activity activity) {
        super.onAttach(activity);
        try {
            buttonListener = (ButtonPressListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                    + " must implement onButtonPressed");

        }
    }

    // creating the main View.

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub

        View view = inflater.inflate(R.layout.listbuy, container, false);
        mcurrencyListview = (ListView) view.findViewById(R.id.BuyList);



        mCurrencyAdapter = new CurrencyAdapter(getActivity(),
                R.layout.currency_row, mList, checkFlag, getLanguage());
        mcurrencyListview.setAdapter(mCurrencyAdapter);






        // calling method getCurrency which take bank code as a parameter
        /*getCurrency(code,null);*/

        // reference to the list view of the corresponding layout

        mcurrencyListview.setOnItemClickListener(new OnItemClickListener() {

            // onClick on the List item

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1,
                    int position, long arg3) {

                // getting Currency object according to the position
                Currency currencyObject = mCurrencyAdapter.getItem(position);
                // sending the object to the mainActivity
                buttonListener.onListItemPressed(currencyObject, bankName,recCode);


            }
        });

        return view;
    }



}

1 个答案:

答案 0 :(得分:0)

首先,您应该使用FragmentPagerAdapter代替FragmentStatePagerAdapter(查看here以获取更多信息)。

现在,对手头的问题。 使用以下内容获取ListView [A]

的当前位置
int index = mListA.getFirstVisiblePosition();
View v = mListA.getChildAt(0);
int top = (v == null) ? 0 : v.getTop();

并使用它来设置ListView [B]:

的位置
mListB.setSelectionFromTop(index, top);

请查看this SO post以获取更多信息。