首先是主布局fragment里面的xml文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_reservation"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/new_main_bg"
tools:context="com.hhzt.iptv.lvb_w8.activity.ReservationActivity"> <LinearLayout
android:id="@+id/layout"
android:layout_width="@dimen/layx150"
android:layout_height="match_parent"
android:orientation="vertical"
>
<TextView
android:id="@+id/title_name"
android:layout_width="match_parent"
android:layout_height="@dimen/layx80"
android:textSize="@dimen/layx30"
android:textColor="@color/white"
android:singleLine="true"
android:layout_gravity="center"
android:gravity="center"
android:background="@color/food_title"
/> <ListView
android:id="@+id/listview_left"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:cacheColorHint="#00000000"
android:divider="@color/bian_white"
android:dividerHeight="@dimen/layx1"
android:drawSelectorOnTop="false"
android:fastScrollEnabled="true"
android:focusable="true"
android:background="@color/food_content"
android:listSelector="@drawable/food_menu_selector"
android:descendantFocusability="blocksDescendants"
android:scrollbars="none" >
</ListView> </LinearLayout> <LinearLayout
android:id="@+id/layout_ll"
android:layout_width="@dimen/layx400"
android:layout_height="@dimen/layx50"
android:orientation="horizontal"
android:layout_alignParentRight="true"
android:layout_marginRight="@dimen/layx50"
android:layout_marginTop="@dimen/layx50"
android:gravity="center"
> <LinearLayout
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:orientation="horizontal"
android:layout_gravity="center"
android:gravity="center"
android:focusable="true"
android:clickable="true"
android:paddingLeft="@dimen/layx10"
android:paddingRight="@dimen/layx10"
android:background="@drawable/shopping_selector"
>
<ImageView
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:scaleType="fitXY"
android:padding="@dimen/layx5"
android:src="@drawable/shopping"
/>
<TextView
android:id="@+id/shopping"
android:layout_width="0dp"
android:layout_weight="2"
android:layout_height="match_parent"
android:layout_gravity="center"
android:gravity="center"
android:singleLine="true"
android:ellipsize="marquee"
android:textColor="@color/food_d_text"
android:textSize="@dimen/layx28"
android:text="购物车"
/> </LinearLayout> <LinearLayout
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:orientation="horizontal"
android:layout_gravity="center"
android:gravity="center"
android:focusable="true"
android:clickable="true"
android:paddingLeft="@dimen/layx10"
android:paddingRight="@dimen/layx10"
android:layout_marginLeft="@dimen/layx20"
android:background="@drawable/shopping_selector"
>
<ImageView
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:scaleType="fitXY"
android:padding="@dimen/layx5"
android:src="@drawable/history"
/>
<TextView
android:id="@+id/history"
android:layout_width="0dp"
android:layout_weight="3"
android:layout_height="match_parent"
android:layout_gravity="center"
android:gravity="center"
android:singleLine="true"
android:ellipsize="marquee"
android:textColor="@color/food_d_text"
android:textSize="@dimen/layx28"
android:text="历史订单"
/>
</LinearLayout> </LinearLayout> <android.support.v7.widget.RecyclerView
android:id="@+id/listview_right"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_toRightOf="@id/layout"
android:layout_below="@id/layout_ll"
android:paddingLeft="@dimen/layx20"
android:paddingRight="@dimen/layx20"
android:layout_marginTop="@dimen/layx20"
android:nextFocusUp="@+id/shopping"
android:scrollbars="none"/>
</RelativeLayout> 然后是activity上面的fragment
package com.hhzt.iptv.lvb_w8.fragment;

import android.os.Bundle;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.TextView; import com.hhzt.iptv.R;
import com.hhzt.iptv.lvb_w8.adapter.FoodAdapter;
import com.hhzt.iptv.lvb_w8.adapter.FoodAdapterRight;
import com.hhzt.iptv.lvb_w8.bean.FoodBean;
import com.hhzt.iptv.lvb_w8.bean.FoodDetailsBean;
import com.hhzt.iptv.lvb_w8.interfaces.IBeanOnSuccessCB;
import com.hhzt.iptv.lvb_y.BaseActivity;
import com.hhzt.iptv.lvb_y.business.UIDataller;
import com.hhzt.iptv.lvb_y.log.LogUtil;
import com.lidroid.xutils.ViewUtils;
import com.lidroid.xutils.view.annotation.ViewInject; import java.util.ArrayList; //订餐服务界面
public class ReservationFragment extends BaseFragment implements FoodAdapterRight.OnItemClickListener{ @ViewInject(R.id.title_name)
private TextView mWelcomeTextView; //标题
@ViewInject(R.id.listview_left)
private ListView mListview_left; //列表list
@ViewInject(R.id.shopping)
private TextView mShopping; //购物车
@ViewInject(R.id.history)
private TextView mHistory; //历史订单
@ViewInject(R.id.listview_right)
private RecyclerView mListViewRight; //菜品详情RecyclerView
private ArrayList<FoodBean.ListBean> mBean;
//详情页的list
private ArrayList<FoodDetailsBean.ListBean> mFoodDetailsBean = new ArrayList<>(); private FoodAdapterRight mAdapterRight;
private String mCurTitle = "";
private int mTitlePos = 0; @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_reservation, container, false);
ViewUtils.inject(this, view);
return view;
} @Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (null == savedInstanceState) {
requseFoodType();
setMonitor();
}
} private void setMonitor() {
mListview_left.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
switch (keyCode){
case KeyEvent.KEYCODE_DPAD_UP:
if(event.getAction() == KeyEvent.ACTION_DOWN){
if(mTitlePos > 0){
mTitlePos --;
mListview_left.setSelection(mTitlePos);
requseFoodDetailedMenu(mTitlePos,mBean.get(mTitlePos).getId(),1,1000);
}
}
break;
case KeyEvent.KEYCODE_DPAD_DOWN:
if(event.getAction() == KeyEvent.ACTION_DOWN){
if(mTitlePos < mBean.size()-1){
mTitlePos ++;
mListview_left.setSelection(mTitlePos);
requseFoodDetailedMenu(mTitlePos,mBean.get(mTitlePos).getId(),1,1000);
}
}
break;
} return false;
}
}); } /**
* 请求右侧详细数据
*/
private void requseFoodDetailedMenu(final int pos,int id,int pum,int size){
UIDataller.getDataller().gotoRequseFoodDetailedMenu(id, pum, size, new IBeanOnSuccessCB<ArrayList<FoodDetailsBean.ListBean>>() {
@Override
public void onSuccess(ArrayList<FoodDetailsBean.ListBean> bean) {
if(pos != mTitlePos){
return;
}
mFoodDetailsBean.clear();
mFoodDetailsBean = bean;
initRightAdapter();
}
}); } /**
* 初始化右侧数据
*/
private void initRightAdapter() {
if(mAdapterRight == null){
GridLayoutManager linearLayoutManager = new GridLayoutManager(getActivity(),4);
mListViewRight.setLayoutManager(linearLayoutManager);
LogUtil.i("TAG","mListViewRight:"+mListViewRight.getWidth());
mAdapterRight = new FoodAdapterRight(getActivity(), mFoodDetailsBean, mListViewRight);
mAdapterRight.setOnKey(this);
mListViewRight.setAdapter(mAdapterRight);
}else{
mAdapterRight.setDataList(mFoodDetailsBean);
mListViewRight.setAdapter(mAdapterRight);
} } /**
* 请求左侧分类列表
*/
private void requseFoodType() {
UIDataller.getDataller().gotoRequseFoodType(new IBeanOnSuccessCB<FoodBean>() {
@Override
public void onSuccess(FoodBean bean) {
mWelcomeTextView.setText(bean.getClassName());
if(bean.getList() != null && bean.getList().size()>0){
mBean = bean.getList();
initTitleType();
requseFoodDetailedMenu(0,mBean.get(0).getId(),1,1000);
}
}
});
} /**
* 初始化左边分类并设置值
*/
private void initTitleType() { FoodAdapter adapter = new FoodAdapter(getActivity(),mBean);
mListview_left.setAdapter(adapter);
} @Override
public void onItemClick(View view, int position) {
BaseActivity.getInstance().showToast("单击:"+position,0);
} @Override
public void onKey(int keykode, View view, int position) {
switch (keykode){
case KeyEvent.KEYCODE_DPAD_LEFT:
mListview_left.setFocusable(true);
mListview_left.requestFocus();
mListview_left.setSelection(mTitlePos);
break;
}
}
}
左侧listview的adapter
package com.hhzt.iptv.lvb_w8.adapter;

import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button; import com.hhzt.iptv.R;
import com.hhzt.iptv.lvb_w8.bean.FoodBean;
import com.hhzt.iptv.lvb_y.utils.StringUtil; import java.util.ArrayList; /**
* Created by Administrator on 2017-12-09.
*/ public class FoodAdapter extends BaseAdapter { private static final String TAG = FoodAdapter.class.getSimpleName();
private Context mContext;
private ArrayList<FoodBean.ListBean> mDataList = new ArrayList<>();
private int mSelection = 0; public FoodAdapter(Context mContext, ArrayList<FoodBean.ListBean> mDataList) {
this.mContext = mContext;
this.mDataList = mDataList;
} @Override
public int getCount() {
if (null != mDataList)
return mDataList.size();
return 0;
} @Override
public Object getItem(int i) {
if (null != mDataList)
return mDataList.get(i);
return null;
} @Override
public long getItemId(int i) {
return 0;
} @Override
public View getView(int position, View view, ViewGroup viewGroup) {
ViewHolder viewHolder = null;
if (null == view){
viewHolder = new ViewHolder();
view = LayoutInflater.from(mContext).inflate(R.layout.item_left, null);
viewHolder.textContent = (Button) view.findViewById(R.id.text_content);
view.setTag(viewHolder);
}else {
viewHolder = (ViewHolder) view.getTag();
}
if (null != viewHolder.textContent && null != mDataList && mDataList.size()>0){
viewHolder.textContent.setText(StringUtil.setText(mDataList.get(position).getName())); }else {
Log.i(TAG, "getView: null == mDataList");
}
return view;
} public int getSelection() {
return mSelection;
} public void setSelection(int selection) {
mSelection = selection;
notifyDataSetChanged();
} class ViewHolder{
Button textContent;
}
}
adapter里面的xml布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"> <Button
android:id="@+id/text_content"
android:layout_width="match_parent"
android:layout_height="@dimen/layx60"
android:textColor="@color/bottom_city_color"
android:gravity="center"
android:layout_gravity="center"
android:background="@null"
android:textSize="@dimen/layx24"/>
</LinearLayout>
RecyclerView的adapter适配器
package com.hhzt.iptv.lvb_w8.adapter;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView; import com.bumptech.glide.Glide;
import com.hhzt.iptv.R;
import com.hhzt.iptv.lvb_w8.bean.FoodDetailsBean; import java.util.ArrayList; /**
* Created by zyf on 2017/5/8.
* 右边RecyclerView适配器
*/ public class FoodAdapterRight extends RecyclerView.Adapter<FoodAdapterRight.ViewHolder> { private static final String TAG = FoodAdapterRight.class.getSimpleName();
private final LayoutInflater mInflater;
private final int w;
private final int h;
private Context mContext;
private ArrayList<FoodDetailsBean.ListBean> mDataList = new ArrayList<>();
private RecyclerView mRecyclerView;
private OnItemClickListener listener; public FoodAdapterRight(Context context, ArrayList<FoodDetailsBean.ListBean> dataList , RecyclerView recyclerView) {
mContext = context;
mDataList = dataList;
mRecyclerView = recyclerView;
w = mRecyclerView.getWidth();
h = mRecyclerView.getHeight();
mInflater = LayoutInflater.from(context);
} @Override
public FoodAdapterRight.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = mInflater.inflate(R.layout.item_right,parent,false); return new ViewHolder(view);
} @Override
public void onBindViewHolder(FoodAdapterRight.ViewHolder holder, final int position) {
if (null != mDataList && mDataList.size() > 0) {
ViewGroup.LayoutParams parms = holder.itemView.getLayoutParams();
parms.width = w/4-20;
parms.height = h/2-20;
holder.itemView.setLayoutParams(parms);
holder.item_name.setText(mDataList.get(position).getName());
holder.item_price.setText("¥"+mDataList.get(position).getPrice());
Glide.with(mContext).load(mDataList.get(position).getPictureUrl()).into(holder.item_image);
holder.item_btn.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
switch (keyCode){
case KeyEvent.KEYCODE_DPAD_LEFT:
if(event.getAction() ==KeyEvent.ACTION_DOWN){
if(position%4==0){
listener.onKey(KeyEvent.KEYCODE_DPAD_LEFT,v,position);
return true;
}
}
break;
case KeyEvent.KEYCODE_DPAD_CENTER:
case KeyEvent.KEYCODE_ENTER:
if(event.getAction() ==KeyEvent.ACTION_DOWN){
listener.onItemClick(v,position);
return true;
}
break;
}
return false;
}
});
} else {
Log.i(TAG, "getView: null == mDataList");
}
} @Override
public int getItemCount() {
return mDataList.size();
} class ViewHolder extends RecyclerView.ViewHolder {
Button item_btn;
ImageView item_image;
TextView item_name;
TextView item_price;
TextView select_share;
ViewHolder(View itemView) {
super(itemView);
item_btn = (Button) itemView.findViewById(R.id.item_btn);
item_image = (ImageView) itemView.findViewById(R.id.item_image);
item_name = (TextView) itemView.findViewById(R.id.item_name);
item_price = (TextView) itemView.findViewById(R.id.item_price);
select_share = (TextView) itemView.findViewById(R.id.select_share);
}
} public void setDataList( ArrayList<FoodDetailsBean.ListBean> dataList){
mDataList.clear();
mDataList = dataList;
notifyDataSetChanged();
}
public interface OnItemClickListener {
void onItemClick(View view , int position);
void onKey(int keykode,View view , int position);
} public void setOnKey(OnItemClickListener listener){
this.listener = listener;
} }
适配器里面的xml文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/item__view_container"
android:layout_width="wrap_content"
android:descendantFocusability="beforeDescendants"
android:layout_height="wrap_content"> <Button
android:id="@+id/item_btn"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/vod_item_bg_selector" /> <LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="@dimen/layx7"
android:orientation="vertical"
>
<ImageView
android:id="@+id/item_image"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="3"
android:scaleType="fitXY" /> <RelativeLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="@color/white"
android:paddingLeft="@dimen/layx20"
android:paddingRight="@dimen/layx10"
android:layout_weight="1">
<TextView
android:id="@+id/item_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:ellipsize="marquee"
android:gravity="center_vertical|left"
android:paddingBottom="@dimen/layx5"
android:paddingTop="@dimen/layx5"
android:singleLine="true"
android:textColor="@color/red"
android:textSize="@dimen/layx20" /> <TextView
android:id="@+id/item_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@id/item_price"
android:ellipsize="marquee"
android:gravity="center_vertical|left"
android:paddingBottom="@dimen/layx5"
android:paddingTop="@dimen/layx5"
android:singleLine="true"
android:textColor="@color/black"
android:textSize="@dimen/layx20" /> <TextView
android:id="@+id/select_share"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:gravity="bottom|center_horizontal"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:paddingBottom="@dimen/layx5"
android:paddingTop="@dimen/layx5"
android:singleLine="true"
android:textColor="@color/red"
android:textSize="@dimen/layx20" />
</RelativeLayout>
</LinearLayout>
</RelativeLayout> 上述里面的button的背景选择器都没有上传,因为带有图片
 
 

Android为TV端助力 listview与recyclerview上下联动的更多相关文章

  1. Android为TV端助力listview 非常重要的几个属性

    首先是stackFromBottom属性,这只该属性之后你做好的列表就会显示你列表的最下面,值为true和false Android:stackFromBottom="true" ...

  2. Android为TV端助力 转载:RecyclerView分页加载

    package com.android.ryane.pulltoloaddata_recyclerview; import android.os.Handler;import android.os.L ...

  3. Android为TV端助力 布局、绘制、内存泄露、响应速度、listview和bitmap、线程优化以及一些优化的建议!

    1.布局优化 首先删除布局中无用的控件和层级,其次有选择地使用性能较低的viewgroup,比如布局中既可以使用RelativeLayout和LinearLayout,那我们就采用LinearLayo ...

  4. Android 为TV端助力之解决ViewPager嵌套RecyclerView水平滑动问题

    public class MyViewPager extends ViewPager { private RecyclerView recyclerView; public MyViewPager(@ ...

  5. Android为TV端助力:RecyclerView更新数据时焦点丢失

    1.adapter的setHasStableIds设置成true 2.重写adapter的getItemId方法 @Override public long getItemId(int positio ...

  6. Android为TV端助力(转载)

    作者地址http://www.jianshu.com/u/63915ef020e2 针对Android Tv的自定义RecyclerView 作者 wenju_song 关注 2016.12.09 1 ...

  7. Android为TV端助力 不需要Socket的跨进程推送消息AIDL!

    上篇介绍了跨进程实时通讯http://www.cnblogs.com/xiaoxiaing/p/5818161.html 但是他有个缺点就是服务端无法推送消息给客户端,今天这篇文章主要说的就是服务器推 ...

  8. Android为TV端助力 关于Fragment你所需知道的一切!

    转载自刘明渊 的博客地址:http://blog.csdn.net/vanpersie_9987 Fragment 是 Android API 中的一个类,它代表Activity中的一部分界面:您可以 ...

  9. Android为TV端助力 apk静默安装

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/47803149 之前有很多朋友都问过我,在Android系统中怎样才能实现静默安装呢 ...

随机推荐

  1. KnockOut 绑定之foreach绑定

    foreach绑定对于数组中的每一个元素复制一节标记语言,也就是html,并且将这节标记语言和数组里面的每一个元素绑定.当我们呈现一组list数据,或者一个表格的时候,十分有用. 如果你绑定的数组是一 ...

  2. 简单Java类 全网最详细讲解 !!!

    最近学习java非常吃力,学习的进度很快,由于基础没打牢固,整体上项目理解很吃力,偶尔会遇到一些基本的概念,都会阻碍整体的理解.最近也看了不少的视频讲解,听得很迷,最后搞得很乱,没有明确的学习目标,今 ...

  3. Unity C#笔记 委托&事件

    C#的委托与事件搭配,即是观察者模式的一种实现. 因为观察者模式的原理很易懂,不作多讲,本文纯粹用于记录语法. delegate(委托) //声明没有参数,没有返回值的委托类型XXXX public ...

  4. Flutter 即学即用系列博客——05 StatelessWidget vs StatefulWidget

    前言 上一篇我们对 Flutter UI 有了一个基本的了解. 这一篇我们通过自定义 Widget 来了解下如何写一个 Widget? 然而 Widget 有两个,StatelessWidget 和 ...

  5. 自定义超链接动画---transition

    效果图: <a href="#"> <span>HTML</span> </a> a { position: relative; t ...

  6. 自定义view 波浪效果

    实现波浪效果view,可以自定义view,也可以自定义drawable,我个人比较喜欢重写drawable,因此这里是自定义drawable实现效果,费话少说,先看效果. 这里用了两种方式实现波浪效果 ...

  7. 安装windows 10到固态硬盘实践记录

    1.前提 由于之前一直用的机械硬盘,电脑用了几年是越来越慢,所以打算买个SSD,装个新系统,其他的机械硬盘都当从盘用 2.准备工作 SSD :256G 3星的 WIN10正版光盘一张 外置光驱一个 3 ...

  8. Windows内置安全主体

    转自:https://blog.csdn.net/xcntime/article/details/51746148 导读:对于Windows内置安全主体特别需要注意的是:你无法创建.重命名和删除它们, ...

  9. 3星|路江涌《共演战略画布》:PPT技巧级别的创新,缺实际分析案例

    作者用自己的思路综合现有各种战略思想,给出企业各阶段各要素的战略分析工具.主要是2*2矩阵和双S曲线两种工具. 从书中的插图来看,这些工具在PPT演示中效果应该会不错. 作者在书中用这些工具做的分析不 ...

  10. Java枚举储存的一种索引实现方式

    首先引入guava包(一个进行代码校验的工具类): <dependency> <groupId>com.google.guava</groupId> <art ...