Android 两个ListView联动,仿电影展示界面
Android 两个ListView联动,仿电影展示界面
需要导入的依赖包:
compile 'com.squareup.picasso:picasso:2.5.2' compile 'io.reactivex:rxjava:1.2.7' compile 'io.reactivex:rxandroid:1.2.1' compile 'com.squareup.retrofit2:retrofit:2.2.0' compile 'com.squareup.retrofit2:converter-gson:2.2.0' compile 'com.squareup.retrofit2:adapter-rxjava:2.2.0'
xml布局:(布局里面是两个listview,方向是横向的)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <ListView android:id="@+id/left" android:layout_width="88dp" android:background="#eaebec" android:layout_height="match_parent" /> <ListView android:id="@+id/right" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
适配器:(既然是两个布局格式不同listview,就必须是两个适配器了,下面是左边listview的适配器,左边控制listview标题,右边控制展示)
import android.content.Context; import android.graphics.Color; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; import java.util.ArrayList; import java.util.List; public class LeftAdapter extends BaseAdapter {List<String> data; LayoutInflater inflater; private int selectItem=0; public void setSelectItem(int selectItem) {this.selectItem = selectItem; notifyDataSetChanged(); }public LeftAdapter(Context context) {data=new ArrayList<>(); for (int i = 0; i < 10; i++) {data.add("电影"+i); }inflater=LayoutInflater.from(context); }@Override public int getCount() {return data!=null?data.size():0; }@Override public String getItem(int position) {return data.get(position); }@Override public long getItemId(int position) {return position; }@Override public View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder; if (convertView == null) {convertView=inflater.inflate(R.layout.left_item,parent,false); holder=new ViewHolder(convertView); convertView.setTag(holder); }else {holder= (ViewHolder) convertView.getTag(); }holder.mText.setText(data.get(position)); if (selectItem == position) {holder.mText.setTextColor(Color.BLUE); holder.mIndicator.setVisibility(View.VISIBLE); }else {holder.mText.setTextColor(Color.BLACK); holder.mIndicator.setVisibility(View.INVISIBLE); }return convertView; }public static class ViewHolder{TextView mText; View mIndicator; public ViewHolder(View itemView) {mText= (TextView) itemView.findViewById(R.id.left_text); mIndicator=itemView.findViewById(R.id.left_indicator); }}}
listview右边适配器:
import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import com.squareup.picasso.Picasso; import java.util.ArrayList; import java.util.List; public class RightAdapter extends BaseAdapter {List<ParaseData.DataBean> data; LayoutInflater inflater; Context context; public RightAdapter(Context context, List<ParaseData.DataBean> data) {this.context=context; inflater = LayoutInflater.from(context); if (data != null) {this.data=data; }else {this.data=new ArrayList<>(); }}public void addRes(List<ParaseData.DataBean> data){if (data != null) {this.data.clear(); this.data.addAll(data); notifyDataSetChanged(); }}@Override public int getCount() {return data.size(); }@Override public ParaseData.DataBean getItem(int position) {return data.get(position); }@Override public long getItemId(int position) {return position; }@Override public View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder; if (convertView == null) {convertView = inflater.inflate(R.layout.right_item, parent, false); holder = new ViewHolder(convertView); convertView.setTag(holder); } else {holder= (ViewHolder) convertView.getTag(); }holder.mTitle.setText(getItem(position).getTitle()); holder.mMsg.setText(getItem(position).getTitle()); Picasso.with(context).load(getItem(position).getImage()).into(holder.mImg); return convertView; }public static class ViewHolder {ImageView mImg; TextView mTitle; TextView mMsg; public ViewHolder(View itemView) {mImg = (ImageView) itemView.findViewById(R.id.right_img); mTitle = (TextView) itemView.findViewById(R.id.right_text); mMsg = (TextView) itemView.findViewById(R.id.right_msg); }} }
总实现代码:
import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.AbsListView; import android.widget.AdapterView; import android.widget.ListView; import retrofit2.Retrofit; import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory; import retrofit2.converter.gson.GsonConverterFactory; import rx.Observable; import rx.Subscriber; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; public class MainActivity extends AppCompatActivity{/** * 右侧电影列表的接口 * http://app.vmoiver.com/apiv3/post/getPostInCate?cateid=0&p=1 */ private ListView mLeft; private ListView mRight; private RightAdapter rightAdapter; private LeftAdapter adapter; //记录滑动的ListView 滑动的位置 private int scrollPosition = -1; @Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); getData(); }private void getData() {Retrofit retrofit = new Retrofit.Builder().addCallAdapterFactory(RxJavaCallAdapterFactory.create()).addConverterFactory(GsonConverterFactory.create()).baseUrl("http://app.vmoiver.com").build(); ApiService apiService = retrofit.create(ApiService.class); Observable<ParaseData> apiServiceMovieList = apiService.getMovieList(); apiServiceMovieList.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Subscriber<ParaseData>() {@Override public void onCompleted() {}@Override public void onError(Throwable e) {}@Override public void onNext(ParaseData paraseData) {rightAdapter.addRes(paraseData.getData()); }}); }private void initView() {mLeft = (ListView) findViewById(R.id.left); mRight = (ListView) findViewById(R.id.right); adapter = new LeftAdapter(this); mLeft.setAdapter(adapter); rightAdapter = new RightAdapter(this, null); mRight.setAdapter(rightAdapter); mLeft.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) {adapter.setSelectItem(position); mRight.setSelection(position); }}); mRight.setOnScrollListener(new AbsListView.OnScrollListener() {@Override public void onScrollStateChanged(AbsListView view, int scrollState) {}@Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {if (scrollPosition != firstVisibleItem) {adapter.setSelectItem(firstVisibleItem); mLeft.setSelectionFromTop(firstVisibleItem, 40); scrollPosition = firstVisibleItem; }}}); } }
还有就是加网络权限。
Android 两个ListView联动,仿电影展示界面相关推荐
- android 仿美团联动,仿美团弹出分类选择框(左右两个listview联动)
[实例简介] 左边产品大类,选择某一类后在右边展开其中的小类,用两个listview联动实现 [实例截图] [核心代码] 1535269showPopWindow └── showPopWindow ...
- 仿美团外卖,饿了吗 两个ListView联动,左边点击切换右边,右边滑动切换左边
先上效果图: 实现思路: 1.先说右边标题: 首先,右边的数据源集合中的Javabean中含有三个属性name,type,title,而每个条目中会默认含有一个标题. 如果这是第一个条目,就让标题显示 ...
- 两款苹果cms仿电影先生的
仿电影先生2.0 已破解无加密无授权带后台 模板介绍: --2021-05-- 1.添加模板后台 2.新增留言/资讯/专题/会员中心/用户注册/影片收藏等模块 3.添加广告位 --2021-04-- ...
- android 类似充值界面,Android学习之RecylerView实习仿支付宝充值界面
今天周末,闲来无事,做了一个仿支付宝充值界面,主要知识点用RecylerView的GridlayoutManager布局管理器,实现不同数据类型,填充不同布局,功能包括单击选中,双击取消,支持可输入金 ...
- android 高仿点餐,仿饿了吗点餐界面ListView联动的实现
主要实现了2个ListView怎样实现互相关联,正好上篇博客review了ListView控件常规使用,因此本篇博客主要对大神的那篇博客的实现进行代码层的剖析. 一方面,方便自己,在以后的代码实现上加 ...
- Android实现导航菜单随着ListView联动,当导航菜单遇到顶部菜单时停止在哪里,并且listview仍能滑动...
需求:现要实现一个特殊UI的处理,如下图所示: 该布局的上面是一个"按钮",中间是一个"空白布局(当然也可以是ViewPager等)",下面是一个页面的导航菜单 ...
- Android 一个页面上下两个ListView的页面显示
Android 一个页面上下两个ListView,当上面的ListView过长时,下面的List基本没有了滑动空间,查阅网上资料,解决办法基本是采用ScrollView做页面滑动,notifyData ...
- android 自定义 滑动删除,Android_Android ListView实现仿iPhone实现左滑删除按钮的简单实例,需要自定义ListView。这里就交Fl - phpStudy...
Android ListView实现仿iPhone实现左滑删除按钮的简单实例 需要自定义ListView.这里就交FloatDelListView吧. 复写onTouchEvent方法.如下: @Ov ...
- 两个ListView实现的Android点餐页面
ListView实现的点餐页面(含热门推荐.购物车) 这是我的第一篇博文,主要是用来记录自己的学习过程,同时方便和大家互相学习.第一次写,写的不好,大家还请多包涵. 首先来看看这个页面的效果图: 该页 ...
最新文章
- AI每日精选:新加坡批准AI血管超声扫描;蔚来硅谷裁员141人
- 【总结】IE和Firefox的Javascript兼容性总结
- #2006 - MySQL server has gone away 问题解决方法 (全) (转)
- 什么样的研究有价值?
- 如何使用CloudFormation自动在AWS EC2上安装Anaconda
- 7-181 最长连续递增子序列 (20 分)
- Hadoop分布式文件系统HDFS
- html中iframe子页面与父页面元素的访问以及js变量的访问
- 幅度和幅值有区别吗_你知道避雷器与浪涌保护器二者的区别吗?
- 10个不错的编程等宽字体
- Saber 基本操作学习-Buck仿真实例
- 需求分析中系统参与者的概念和确定
- UPX3.95程序压缩命令及使用方法
- 自己对香港一卡通的总结
- 迪士尼源码下载站_如何下载迪士尼+电影和电视节目以离线观看
- 微信小店二次开发_怎么吧微信小店装修的更好看
- cpu是计算机硬件中的,电脑硬件CPU介绍
- pr2020lut导入_pr lut预设怎么安装-PR下导入lut预设的方法 - 河东软件园
- 渲染系列--图像渲染过程
- 实战:手把手带你从0到1搭建自己的hugo博客站点(持续更新)-2022.5.4