水平弯曲列表视图

时间:2017-07-27 19:07:11

标签: android android-layout android-viewpager

我想要实现的用户界面是Screenshot

我正在尝试使用视图寻呼机,如下所示

<android.support.v4.view.ViewPager
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:id="@+id/vpSalary"
        />

在我的java代码中,我为视图分页器设置了这些属性

vpSalary.setAdapter(new CustomPagerAdapter(getContext(),this));
vpSalary.setClipToPadding(false);
vpSalary.setPadding(330,0,330,0);
vpSalary.setCurrentItem(2);

我的适配器是

public class CustomPagerAdapter extends PagerAdapter {

    String salarylist[] = {"30,000","40,000","50,000","60,000"};
    private Context mContext;
    private PagerCallBack mPagerCallBack;
    private Fragment fragment;
    public CustomPagerAdapter(Context context,Fragment fragment) {
        mContext = context;
        this.fragment=fragment;
        mPagerCallBack= (PagerCallBack) fragment;
    }

    @Override
    public Object instantiateItem(ViewGroup collection, int position) {
        //if Length of both array's  (salarylist and tipler) Always remains same then we can do code like below.

        LayoutInflater inflater = LayoutInflater.from(mContext);
        ViewGroup layout = (ViewGroup) inflater.inflate(R.layout.adapter_salary_list, collection, false);
        TextView textView= (TextView) layout.findViewById(R.id.txtSalary);
        textView.setTextColor(mContext.getResources().getColor(R.color.highlight_grey));
        collection.addView(layout);
        collection.requestFocus();

        return layout;
    }

    @Override
    public void destroyItem(ViewGroup collection, int position, Object view) {
        collection.removeView((View) view);
    }

    @Override
    public int getCount() {
        return salarylist.length;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }

    public interface PagerCallBack{
        void getPagerCallBack(View view);
    }
}

之后我得到了这个enter image description here

我的问题是,如何在我的片段中获得焦点页面的视图? 我只想更改有焦点的TextView

1 个答案:

答案 0 :(得分:2)

  

实现此目的的一种方法是将您的视图寻呼机添加到   OnPageChangeListener。当页面选择意味着在   位置更改时,onPageSelected方法更新适配器。

注意:关于如何动态更新视图寻呼机适配器请参阅this

第1步:

class CustomPagerAdapter extends PagerAdapter {

    private int mCurrentPosition;
    //rest of your code 

    void setCurrentPosition(int position) {
        mCurrentPosition = position;
        notifyDataSetChanged();
    }

    @Override
    public Object instantiateItem(ViewGroup collection, int position) {
        //if Length of both array's  (salarylist and tipler) Always remains same then we can do code like below.

        LayoutInflater inflater = LayoutInflater.from(mContext);
        ViewGroup layout = (ViewGroup) inflater.inflate(R.layout.adapter_salary_list, collection, false);
        TextView textView= (TextView) layout.findViewById(R.id.txtSalary);
        if(position == mCurrentPosition) {
            textView.setTextColor(highlightedTextColor);
        } else {
            textView.setTextColor(defaultTextColor)
        }
        collection.addView(layout);
        collection.requestFocus();

        return layout;
    }
}

第2步:

   CustomPagerAdapter adapter = new CustomPagerAdapter(getContext(),this);
   vpSalary.setAdapter(adapter);

    vpSalary.addOnPageChangeListener(new OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }

        @Override public void onPageSelected(int position) {
            adapter.setCurrentPosition(position);
        }

        @Override public void onPageScrollStateChanged(int state) {

        }
    });