2017-07-27 109 views
0

我要實現的UI是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

回答

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) { 

     } 
    }); 
+0

謝謝對於你的解決方案,我不得不添加'@Override public int getItemPosition(Object object){ return PagerAdapter.POSITION_NONE; ',其餘都很完美 –