仿淘宝宝贝详情页面三个Tablayout小demo:
activity_main布局:
android:id="@+id/tb" android:layout_width="match_parent" android:layout_height="wrap_content"> android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="baby" /> android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="discuss"/> android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="detail" />
android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/lv"/> MainActivity代码: package com.example.lijunlu.taobao; import android.os.Bundle; import android.support.design.widget.TabLayout; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.AbsListView; import android.widget.ListView; import android.widget.Toast; import java.lang.reflect.Field; import java.util.ArrayList; public class MainActivityextends AppCompatActivityimplements AbsListView.OnScrollListener { private TabLayouttb; private ListViewlv; private ArrayListlist; private int position; private CustomAdapteradapter1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); list =new ArrayList<>(); for (int i =0; i <200; i++) { list.add("龙雀" + i); } initView(); } private void initView() { tb = (TabLayout) findViewById(R.id.tb); lv = (ListView) findViewById(R.id.lv); adapter1 =new CustomAdapter(list,this); lv.setAdapter(adapter1); lv.setOnScrollListener(this); for (int i =0; i TabLayout.Tab tab =tb.getTabAt(i); if (tab ==null) return; Class c = tab.getClass(); try { Field field = c.getDeclaredField("mView"); field.setAccessible(true); final View view = (View) field.get(tab); if (view ==null) return; view.setTag(i); view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { position = (int)view.getTag(); switch (position) { case 0: lv.setSelection(0); break; case 1: lv.setSelection(50); break; case 2: lv.setSelection(70); break; } } }); }catch (Exception e) { e.printStackTrace(); } } } int post; @Override public void onScrollStateChanged(AbsListView view,int scrollState) { switch (scrollState) { case 0: switch (post) { case 0: TabLayout.Tab tab =tb.getTabAt(0); tab.select(); break; case 50: TabLayout.Tab tab2 =tb.getTabAt(1); tab2.select(); break; case 70: TabLayout.Tab tab3 =tb.getTabAt(2); tab3.select(); break; } Toast.makeText(this,"我现在处于不滑动状态", Toast.LENGTH_SHORT).show(); break; case 1: Toast.makeText(this,"我现在处于滑动状态", Toast.LENGTH_SHORT).show(); break; } } @Override public void onScroll(AbsListView view,int firstVisibleItem,int visibleItemCount,int totalItemCount) { switch (firstVisibleItem) { case 0: post =0; break; case 50: post =50; break; case 70: post =70; break; case 49: post =0; break; case 69: post =50; break; } } } 适配器: package com.example.lijunlu.taobao; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; import java.util.ArrayList; public class CustomAdapterextends BaseAdapter { private ArrayListlist =new ArrayList<>(); private Contextcontext; public CustomAdapter(ArrayList list, Context context) { this.list = list; this.context = context; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder =null; if (convertView ==null) { convertView = LayoutInflater.from(context).inflate(R.layout.item,null); viewHolder =new ViewHolder(convertView); convertView.setTag(viewHolder); }else { viewHolder = (ViewHolder)convertView.getTag(); } viewHolder.tv.setText(list.get(position)); return convertView; } public static class ViewHolder { public ViewrootView; public TextViewtv; public ViewHolder(View rootView) { this.rootView = rootView; this.tv = (TextView) rootView.findViewById(R.id.tv); } } }