是否有可能使ListView水平?我使用图库视图完成了此操作,但所选项目会自动出现在屏幕的中心。我不希望选中的项目位于我点击的同一位置。我该如何纠正这个问题?我的想法是用水平滚动来设置ListView。分享你的想法?


当前回答

根据Android文档RecyclerView是新的方式来组织项目在列表视图和水平显示

优点:

由于使用Recyclerview适配器,ViewHolder模式是 自动实现 动画很容易执行 更多特性

关于RecyclerView的更多信息:

grokkingandroid.com antonioleiva.com

示例:

survivingwithandroid.com

只需添加下面的块,使ListView水平从垂直

代码片段

LinearLayoutManager layoutManager= new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL, false);
mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
mRecyclerView.setLayoutManager(layoutManager);

其他回答

这不是一个很好的答案,但是如何使用水平滚动视图呢?

从这里下载jar文件

现在把它放到你的libs文件夹中,右键点击它并选择“添加为库”

现在在main.xml中放入这段代码

 <com.devsmart.android.ui.HorizontalListView
    android:id="@+id/hlistview"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    />

现在在Activity类中,如果你想要带有图像的水平列表视图,那么就把这段代码放进去

  HorizontalListView hListView = (HorizontalListView) findViewById(R.id.hlistview);
    hListView.setAdapter(new HAdapter(this));


 private class HAdapter extends BaseAdapter {

    LayoutInflater inflater;

    public HAdapter(Context context) {
        inflater = LayoutInflater.from(context);

    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return Const.template.length;
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        HViewHolder holder;
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.listinflate, null);
            holder = new HViewHolder();
            convertView.setTag(holder);

        } else {
            holder = (HViewHolder) convertView.getTag();
        }
        holder.img = (ImageView) convertView.findViewById(R.id.image);
        holder.img.setImageResource(Const.template[position]);
        return convertView;
    }

}

class HViewHolder {
    ImageView img;
}

您可以在支持库中使用RecyclerView。RecyclerView是ListView的一个通用版本,支持:

用于定位项目的布局管理器 默认动画 项目操作

Android循环查看文档

我在自己的一个项目中也做了同样的事情,最后我也写了自己的项目。我称之为HorzListView现在是我的开源Aniqroid库的一部分。

http://aniqroid.sileria.com/doc/api/(在底部寻找下载或使用谷歌代码项目查看更多下载选项:http://code.google.com/p/aniqroid/downloads/list)

类文档在这里:http://aniqroid.sileria.com/doc/api/com/sileria/android/view/HorzListView.html

当适配器中的数据涉及到另一个线程时,HorizontialListView不能工作。一切都100%在UI线程上运行。这是多线程中的一个大问题。我认为使用HorizontialListView不是解决你的问题的最佳方案。HorzListView是一个更好的方法。你只需用HorzListView替换你以前的画廊。您不需要修改关于适配器的代码。然后一切都会如你所愿。查看https://stackoverflow.com/a/12339708/1525777关于HorzListView。