Android 使用RecyclerView根据客户列表适配器创建水平列表视图

Android 使用RecyclerView根据客户列表适配器创建水平列表视图,android,android-layout,listview,android-recyclerview,android-adapter,Android,Android Layout,Listview,Android Recyclerview,Android Adapter,我正在尝试创建一个图片的水平滚动视图,每个视图都附带一个OnClick监听器,将用户发送到一个新的网页。我已经很好地处理了垂直列表,但现在我希望它是水平的。我怎样才能做到这一点。 我曾尝试使用类似Android suggest的recyclerView,但我无法让它接受适配器 它给了我这个错误: recycler视图无法应用于CustomElistadWater,当我尝试添加onClick时,它会表示无法解析方法setOnClickListern(匿名android.widget.Adapter

我正在尝试创建一个图片的水平滚动视图,每个视图都附带一个OnClick监听器,将用户发送到一个新的网页。我已经很好地处理了垂直列表,但现在我希望它是水平的。我怎样才能做到这一点。 我曾尝试使用类似Android suggest的recyclerView,但我无法让它接受适配器

它给了我这个错误: recycler视图无法应用于CustomElistadWater,当我尝试添加onClick时,它会表示无法解析方法setOnClickListern(匿名android.widget.AdapterView.OnItemClickListener())

这就是我到目前为止所拥有的

这是线性布局管理器

 LinearLayoutManager layoutManager= new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL, false);
    recyclerView = (RecyclerView)findViewById(R.id.promotionHolder);
    recyclerView.setLayoutManager(layoutManager);
在这里,我将客户列表适配器分配给回收视图

 private void fillListView(ArrayList<ListItem> listData)
{
    final ListView listView = (ListView) findViewById(R.id.custom_list);
    listView.setAdapter(new CustomListAdapter(this, listData));
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        //here is a method to either send the user to the poduct page
        //or to the main page in the app
        //open a new activity and close this one down
        @Override
        public void onItemClick(AdapterView<?> a, View v, int position, long id) {
            ListItem promoData = (ListItem) listView.getItemAtPosition(position);
            //lest open up the corrisponding webpage
            Intent reDirect = new Intent();
            reDirect.setAction(Intent.ACTION_VIEW);
            reDirect.addCategory(Intent.CATEGORY_BROWSABLE);
            reDirect.setData(Uri.parse(promoData.getPathUrl()));
            String newUrl = Uri.parse(promoData.getPathUrl()).toString();
            if (newUrl.contains("http")) {
                startActivity(reDirect);
            } else {
                //if not do nothing
                Log.d("Path URL: ", " is null");
            }

        }
    });

    recyclerView.setAdapter(new CustomListAdapter(this, listData));
    recyclerView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        //here is a method to either send the user to the poduct page
        //or to the main page in the app
        //open a new activity and close this one down
        @Override
        public void onItemClick(AdapterView<?> a, View v, int position, long id) {
            ListItem promoData = (ListItem) listView.getItemAtPosition(position);
            //lest open up the corrisponding webpage
            Intent reDirect = new Intent();
            reDirect.setAction(Intent.ACTION_VIEW);
            reDirect.addCategory(Intent.CATEGORY_BROWSABLE);
            reDirect.setData(Uri.parse(promoData.getPathUrl()));
            String newUrl = Uri.parse(promoData.getPathUrl()).toString();
            if (newUrl.contains("http")) {
                startActivity(reDirect);
            } else {
                //if not do nothing
                Log.d("Path URL: ", " is null");
            }

        }
    });
}
private void fillListView(ArrayList listData)
{
最终ListView ListView=(ListView)findViewById(R.id.custom_列表);
setAdapter(新的CustomListAdapter(这个,listData));
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
//下面是一个将用户发送到poduct页面的方法
//或应用程序中的主页
//打开新活动并关闭此活动
@凌驾
公共视图单击(适配器视图a、视图v、内部位置、长id){
ListItem promoData=(ListItem)listView.getItemAtPosition(position);
//以免打开相应的网页
意向重定向=新意向();
重定向.setAction(Intent.ACTION\u视图);
reDirect.addCategory(Intent.CATEGORY_可浏览);
reDirect.setData(Uri.parse(promdata.getPathUrl());
字符串newUrl=Uri.parse(promoData.getPathUrl()).toString();
if(newUrl.contains(“http”)){
星触觉(重定向);
}否则{
//如果不是什么都不做
Log.d(“路径URL:,“为空”);
}
}
});
setAdapter(新的CustomListAdapter(这个,listData));
recyclerView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
//下面是一个将用户发送到poduct页面的方法
//或应用程序中的主页
//打开新活动并关闭此活动
@凌驾
公共视图单击(适配器视图a、视图v、内部位置、长id){
ListItem promoData=(ListItem)listView.getItemAtPosition(position);
//以免打开相应的网页
意向重定向=新意向();
重定向.setAction(Intent.ACTION\u视图);
reDirect.addCategory(Intent.CATEGORY_可浏览);
reDirect.setData(Uri.parse(promdata.getPathUrl());
字符串newUrl=Uri.parse(promoData.getPathUrl()).toString();
if(newUrl.contains(“http”)){
星触觉(重定向);
}否则{
//如果不是什么都不做
Log.d(“路径URL:,“为空”);
}
}
});
}
我保留了原始的Listview,因为它可以很好地作为我使用它的示例

这是我的xml文件

    <android.support.v7.widget.RecyclerView
    android:id="@+id/promotionHolder"
    android:layout_below="@+id/logout"
    android:layout_width="match_parent"
    android:layout_height="240dp"
    android:orientation="horizontal"
    android:layoutManager = "android.support.v7.widget.LinearLayoutManager"
    >


</android.support.v7.widget.RecyclerView>

这是我的自定义列表适配器

public class CustomListAdapter  extends BaseAdapter{
private ArrayList<ListItem> listData;
private LayoutInflater layoutInflater;

public CustomListAdapter(Context context, ArrayList<ListItem> listData) {
    this.listData = listData;
    layoutInflater = LayoutInflater.from(context);
}

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

@Override
public Object getItem(int position) {
    return listData.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if (convertView == null) {
        convertView = layoutInflater.inflate(R.layout.list_row_layout, null);
        holder = new ViewHolder();
        holder.imageView = (ImageView) convertView.findViewById(R.id.thumbImage);
        holder.labelView = (TextView)convertView.findViewById(R.id.label);
        convertView.setTag(holder);

    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    ListItem newsItem = listData.get(position);
    //Check to see if there is a lable attached to the image
    if(newsItem.getLableTitle().equals("null"))
    {
        holder.labelView.setText("");

    }else
    {
        holder.labelView.setText(newsItem.getLableTitle());
    }

    if (holder.imageView != null) {
        new ImageDownloaderTask(holder.imageView).execute(newsItem.getUrl());
    }

    return convertView;
}

static class ViewHolder {
    ImageView imageView;
    TextView labelView;
}
}
公共类CustomListAdapter扩展了BaseAdapter{
私有数组列表数据;
私人停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场;
公共CustomListAdapter(上下文上下文,ArrayList listData){
this.listData=listData;
layoutInflater=layoutInflater.from(上下文);
}
@凌驾
public int getCount(){
返回listData.size();
}
@凌驾
公共对象getItem(int位置){
返回listData.get(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
视窗座;
if(convertView==null){
convertView=LayoutFlater.充气(R.layout.list\u row\u layout,null);
holder=新的ViewHolder();
holder.imageView=(imageView)convertView.findViewById(R.id.thumbImage);
holder.labelView=(TextView)convertView.findViewById(R.id.label);
convertView.setTag(支架);
}否则{
holder=(ViewHolder)convertView.getTag();
}
ListItem newsItem=listData.get(位置);
//检查图像上是否有标签
if(newsItem.getLableTitle().equals(“null”))
{
holder.labelView.setText(“”);
}否则
{
holder.labelView.setText(newsItem.getLableTitle());
}
if(holder.imageView!=null){
新建ImageDownloaderTask(holder.imageView).execute(newItem.getUrl());
}
返回视图;
}
静态类视窗夹{
图像视图图像视图;
TextView labelView;
}
}
这是列表行布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:minHeight="8dp"
android:padding="1dp"
android:background="#000000"
>


<ImageView
    android:id="@+id/thumbImage"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:background="#000000"

    />
<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/label"
    android:layout_below="@id/thumbImage"
    android:layout_marginTop="1dp"
    android:layout_centerHorizontal="true"
    android:textColor="#ffffff"
    android:textSize="8pt"
    />


RecyclerView不提供
#SetonimeClickListener
,也不提供
RecyclerView.Adapter

您应该在Adapters
onBindViewHolder
方法中安装click侦听器。因为我看不到上面对该方法的任何引用,我认为您的适配器尚未迁移到新的RecyclerView方法


你可以参考互联网上的链接,比如学习如何做到这一点。

我要说你的权利,我必须从头开始重做一切。我想我不能重新调整我正在使用的项目的用途。非常感谢您切换到RecyclerView的许多类(
Adapter
ViewHolder
等等)起初感觉很奇怪/复杂,但后来让事情变得非常顺利。你不想回去了。:-)