Android ScrollView 嵌套 RecyclerV
RecyclerView 出现以后 很受大家欢迎 漂亮流畅的列表 简单的操作 可以帮我们完成很多的列表 但是有一种listview 嵌套gridview 的效果 目前还是需要嵌套才能完成 现在就简单说一下我的思路 本人的需求是例如手机淘宝页 本人使用老套的实现模式 Scrollview+recyclerView+gridview 实现 重写gridview 屏蔽recyclerview 滑动 利用Scrollview 进行刷新
下面上代码
<com.handmark.pulltorefresh.library.PullToRefreshScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true"
android:id="@+id/test_refreush">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageView
android:id="@+id/tttt_1"
android:layout_width="match_parent"
android:layout_height="300dp" />
<android.support.v7.widget.RecyclerView
android:layout_below="@+id/tttt_1"
android:id="@+id/atest_list"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>
</RelativeLayout></com.handmark.pulltorefresh.library.PullToRefreshScrollView>
// activity
private RecyclerView atest_list;
private String auuid;
private String aappid;
private String aes;
private List<ATestBean.DataBean> mData = new ArrayList<>();
private MyTestAdapter adapter;
private PullToRefreshScrollView test_refreush;
private int no = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_atest);
atest_list = (RecyclerView) findViewById(R.id.atest_list);
test_refreush = (PullToRefreshScrollView) findViewById(R.id.test_refreush);
atest_list.setHasFixedSize(true);
atest_list.setNestedScrollingEnabled(false);
findViewById(R.id.rl_back).setOnClickListener(this);
LinearLayoutManager manager = new LinearLayoutManager(context,LinearLayoutManager.VERTICAL,false);
atest_list.setLayoutManager(manager);
adapter = new MyTestAdapter(context,mData);
atest_list.setAdapter(adapter);
test_refreush.setMode(PullToRefreshBase.Mode.BOTH);
test_refreush.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ScrollView>() {
@Override
public void onPullDownToRefresh(PullToRefreshBase<ScrollView> refreshView) {
no++;
getShopList(no);
}@Override public void onPullUpToRefresh(PullToRefreshBase<ScrollView> refreshView) { no++; getShopList(no); } }); getShopList(no); } //解析数据 Gson gson = new Gson();
ATestBean testBean = gson.fromJson(data, ATestBean.class);
mData.addAll(testBean.getData());
adapter.notifyDataSetChanged();
if (test_refreush!=null&&test_refreush.isRefreshing()){
test_refreush.onRefreshComplete();
}
重点内容
recyclerView 的 Adapter
public class MyTestAdapter extends RecyclerView.Adapter<MyTestAdapter.ViewHolder1> {
private final LayoutInflater inflater;
Context context;
public List<ATestBean.DataBean> data;
OnClickRecyclerViewItemListener onClickRecyclerViewItemListener;
public MyTestAdapter(Context context, List<ATestBean.DataBean> data) {
this.context = context;
this.data = data;
inflater = LayoutInflater.from(context);
}
@Override
public MyTestAdapter.ViewHolder1 onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.home_listitem, parent, false);
ViewHolder1 holder1 = new ViewHolder1(view);
return holder1;
}
@Override
public void onBindViewHolder(MyTestAdapter.ViewHolder1 holder, final int position) {
if (!TextUtils.isEmpty(data.get(position).getName())){
holder.home_listname.setText(data.get(position).getName());
}else {
holder.home_listname.setText("店铺");
}
ATestGridAdapter adapter = new ATestGridAdapter(context,data.get(position).getServiceList());
holder.home_grid.setAdapter(adapter);
}
@Override
public int getItemCount() {
return data.size();
}
class ViewHolder1 extends RecyclerView.ViewHolder{
RoundImageView home_listimg;
TextView home_listname,home_listxinnum,home_listdistance,home_listpeople;
MyGridView home_grid;
ImageView home_listxin,home_listzhifu,home_listbao,home_listtype;
RelativeLayout home_listitem_layout;
public ViewHolder1(View itemView) {
super(itemView);
home_listimg = (RoundImageView) itemView.findViewById(R.id.home_listimg);
home_listname = (TextView) itemView.findViewById(R.id.home_listname);
home_listxinnum = (TextView) itemView.findViewById(R.id.home_listxinnum);
home_listdistance = (TextView) itemView.findViewById(R.id.home_listdistance);
home_listpeople = (TextView) itemView.findViewById(R.id.home_listpeople);
home_grid = (MyGridView) itemView.findViewById(R.id.home_grid);
home_listxin = (ImageView) itemView.findViewById(R.id.home_listxin);
home_listzhifu = (ImageView) itemView.findViewById(R.id.home_listzhifu);
home_listbao = (ImageView) itemView.findViewById(R.id.home_listbao);
home_listtype = (ImageView) itemView.findViewById(R.id.home_listtype);
home_listitem_layout = (RelativeLayout) itemView.findViewById(R.id.home_listitem_layout);
}
}
public interface OnClickRecyclerViewItemListener{
void recyclerViewItem(int position);
}
public void setRecyclerViewItemListener(OnClickRecyclerViewItemListener onClickRecyclerViewItemListener){
this.onClickRecyclerViewItemListener = onClickRecyclerViewItemListener;
}
}
public class ATestGridAdapter extends BaseAdapter {
private final LayoutInflater inflater;
Context context;
List<ATestBean.DataBean.ServiceListBean> serviceList;
public ATestGridAdapter(Context context, List<ATestBean.DataBean.ServiceListBean> serviceList) {
this.context = context;
this.serviceList = serviceList;
inflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return serviceList.size();
}
@Override
public Object getItem(int position) {
return serviceList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder2 holder2;
if (convertView==null){
convertView = inflater.inflate(R.layout.gridview_item,parent,false);
holder2 = new ViewHolder2();
holder2.gridimg = (ImageView) convertView.findViewById(R.id.gridimg);
holder2.grid_type = (TextView) convertView.findViewById(R.id.grid_type);
holder2.grid_typecontent = (TextView) convertView.findViewById(R.id.grid_typecontent);
holder2.grid_numbercontent = (TextView) convertView.findViewById(R.id.grid_numbercontent);
holder2.home_gridtitle = (LinearLayout) convertView.findViewById(R.id.home_gridtitle);
convertView.setTag(holder2);
}else {
holder2 = (ViewHolder2) convertView.getTag();
}
holder2.grid_type.setText(serviceList.get(position).getName());
return convertView;
}
class ViewHolder2{
ImageView gridimg;
TextView grid_type,grid_typecontent,grid_numbercontent;
LinearLayout home_gridtitle;
}
}
// mygridview
public class MyGridView extends GridView {
public MyGridView(Context context) {
super(context);
}
public MyGridView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
image.png