1. 程式人生 > 程式設計 >android實現滑動標籤頁效果的程式碼解析

android實現滑動標籤頁效果的程式碼解析

實現效果:

在這裡插入圖片描述

實現功能:

  • ViewPager+Fragment實現載入介面
  • SQLite資料獲取並顯示到ListView上
  • ListView的item監聽並攜帶資料跳轉到其他介面
  • 使用SharedPreference儲存部分測試資料

實現過程:

各方法和變數的作用請詳見程式碼註釋。

listview的資料顯示請見Android Studio獲取SQLite資料並顯示到ListView上Fragment+ViewParger實現介面載入
首先要建立兩個類並繼承Fragment,在viewpager中實現顯示時使用。

public class RiderInfo_Fragment extends Fragment {

 List<Map<String,Object>> listitem = new ArrayList<Map<String,Object>>(); //儲存資料的陣列列表---裡面的資料將顯示在ListView中
 ListView listView = null; 
 List<Info> infoList = new ArrayList<>(); //從SQLite中獲得的資料將儲存在改集合中-------info是bean類

 @Override
 public View onCreateView(@NonNull LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
  // Inflate the layout for this fragment
  View view = inflater.inflate(R.layout.rider_info_fragment,null);

  listView = (ListView) view.findViewById(R.id.showRiderInfo); //繫結Listview
  getRiderHistoryInfoFromSQite(getActivity(),infoList); //該方法用於從SQLite中獲取資料,引數二 infoList會儲存獲得資料 
  getDataFromInfoList(); //將list中的資料新增到map集合中
  initListData();
  return view;
 }
  private void getDataFromInfoList() {
  for (int i = 0; i < infoList.size(); i++) {
   Map<String,Object> map = new HashMap<String,Object>();
   map.put("name",infoList.get(i).getUsername());
   map.put("address","f");
   map.put("price","444");
   map.put("objectID",infoList.get(i).objectIds);
   listitem.add(map);
  }
 }

  private void initListData() {
  SimpleAdapter adapter = new SimpleAdapter(getActivity(),listitem,R.layout.rider_info_fragment_item,new String[]{"name","address","price","objectID"},new int[]{R.id.time,R.id.address,R.id.price,R.id.objectID});
  // 第一個引數是上下文物件
  // 第二個是listitem------資料載入
  // 第三個是指定每個列表項的佈局檔案
  // 第四個是指定Map物件中定義的兩個鍵(這裡通過字串陣列來指定)
  // 第五個是用於指定在佈局檔案中定義的id(也是用陣列來指定)
  adapter.setViewBinder(new SimpleAdapter.ViewBinder() {

   //通過實現ViewBinder()這個介面,在裡面定義資料和檢視的匹配關係 ---載入圖片 Bitmap型別(預設是使用R.id.---)
   @Override
   public boolean setViewValue(View view,Object data,String textRepresentation) {
    if ((view instanceof ImageView) & (data instanceof Bitmap)) {
     ImageView iv = (ImageView) view;
     Bitmap bm = (Bitmap) data;
     iv.setImageBitmap(bm);
     return true;
    }
    return false;
   }
  });
  listView.setAdapter(adapter);
  //監聽item項並攜帶資料跳轉到另一個介面
  listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
   @Override
   public void onItemClick(AdapterView<?> adapterView,View view,int i,long l) {
    ListView listView = (ListView) adapterView;
    HashMap<String,String> map = (HashMap<String,String>) listView.getItemAtPosition(i);
    Intent intent = new Intent(getActivity(),RiderInfoManager.class);
    Bundle bundle = new Bundle();
    bundle.putString("objectid",map.get("objectID"));
    intent.putExtras(bundle);
    startActivity(intent);
   }
  });
 }

另一個類的建立過程類似。
3.建立 mainactivity.java用於設定在Viewpager中顯示Fragment

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

private ViewPager vp;
 CustomerInfo_Fragment customerInfo_fragment;
 RiderInfo_Fragment riderInfo_fragment;
 private List<Fragment> mFragmentList = new ArrayList<Fragment>();
 FragmentAdapter mFragmentAdapter;
 TextView custome,rider;

 @Override
 protected void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  initView();
  mFragmentAdapter = new FragmentAdapter(this.getSupportFragmentManager(),mFragmentList);
  vp.setOffscreenPageLimit(2);//ViewPager的快取為2幀
  vp.setAdapter(mFragmentAdapter);
  vp.setCurrentItem(0);//初始設定ViewPager選中第一幀
  //ViewPager的監聽事件
  vp.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
   @Override
   public void onPageScrolled(int position,float positionOffset,int positionOffsetPixels) {

   }

   @Override
   public void onPageSelected(int position) {
    /*此方法在頁面被選中時呼叫*/
    //title.setText(titles[position]);
    changeTextColor(position);
   }

   @Override
   public void onPageScrollStateChanged(int state) {
    /*此方法是在狀態改變的時候呼叫,其中arg0這個引數有三種狀態(0,1,2)。
    arg0==1的時辰默示正在滑動,
    arg0==2的時辰默示滑動完畢了,
    arg0==0的時辰默示什麼都沒做。*/
   }
  });
 }

 void initView() {
  custome = findViewById(R.id.customer);
  rider = findViewById(R.id.rider);
  custome.setOnClickListener(this);
  rider.setOnClickListener(this);
  vp = (ViewPager) findViewById(R.id.mainViewPager);
  customerInfo_fragment = new CustomerInfo_Fragment();
  riderInfo_fragment = new RiderInfo_Fragment();
  mFragmentList.add(customerInfo_fragment);
  mFragmentList.add(riderInfo_fragment);
 }
@Override
 public void onClick(View view) { //用於判斷當前為哪一個fragment
  int i = view.getId();
  if (i == R.id.customer) {
   vp.setCurrentItem(0,true);
  } else if (i == R.id.rider) {
   vp.setCurrentItem(1,true);
  }
 }

 public class FragmentAdapter extends FragmentPagerAdapter {

  List<Fragment> fragmentList = new ArrayList<Fragment>();

  public FragmentAdapter(android.support.v4.app.FragmentManager fm,List<Fragment> fragmentList) {
   super(fm);
   this.fragmentList = fragmentList;
  }

  @Override
  public Fragment getItem(int position) {
   return fragmentList.get(position);
  }

  @Override
  public int getCount() {
   return fragmentList.size();
  }

 }

該方法用於具體執行資料庫資料查詢

 public static void getRiderHistoryInfoFromSQite(Activity activity,List<Info> infoList) {
  DBOpenHelper helper = new DBOpenHelper(activity,"qianbao.db",null,1);
  SQLiteDatabase db = helper.getWritableDatabase();
  Cursor c = db.query("RiderHistoryInfo",null);
  if (c != null && c.getCount() >= 1) {
   while (c.moveToNext()) { //moveToNext是指向表中的下一行資料
    infoList.add(new Info(c.getString(c.getColumnIndex("userName")),c.getString(c.getColumnIndex("userPhone")),c.getString(c.getColumnIndex("price")),c.getString(c.getColumnIndex("address")),c.getString(c.getColumnIndex("createTime")),c.getString(c.getColumnIndex("objectId")),""));
   }
   c.close();
   db.close();
  }
 }

實現過程中的主要程式碼就是這麼多,實現過程比較簡單僅供參考。

完整Demo下載(免費)

到此這篇關於android實現滑動標籤頁效果的程式碼解析的文章就介紹到這了,更多相關android 滑動標籤頁內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!