Android 以相反方向显示ListView项目

Android 以相反方向显示ListView项目,android,listview,listitem,Android,Listview,Listitem,我有一个带有自定义适配器的ListView。每行都有一个缩略图、标题和描述选项。 我有一个要求,即列表项即行内容显示在屏幕的相反方向。也就是说,第一行缩略图和其他内容应位于左侧,第二行内容(缩略图、标题、说明)应位于右侧,依此类推 我怎样才能做到这一点 这是我当前的代码:- list_row.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.a

我有一个带有自定义适配器的ListView。每行都有一个缩略图、标题和描述选项。 我有一个要求,即列表项即行内容显示在屏幕的相反方向。也就是说,第一行缩略图和其他内容应位于左侧,第二行内容(缩略图、标题、说明)应位于右侧,依此类推

我怎样才能做到这一点

这是我当前的代码:-

list_row.xml

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:padding="5dip" >

    <!--  ListRow Left sied Thumbnail image -->
    <LinearLayout android:id="@+id/thumbnail"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="3dip"
        android:layout_alignParentLeft="true"
        android:layout_marginRight="5dip">

        <ImageView
            android:id="@+id/list_image"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:src="@drawable/ic_launcher"/> 


    </LinearLayout>

    <!-- Title Of Song-->
    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/thumbnail"
        android:layout_toRightOf="@+id/thumbnail"
        android:layout_marginLeft="10dp"
        android:textColor="#040404"
        android:typeface="sans"
        android:textSize="15dip"
        android:textStyle="bold"/>

    <!-- Artist Name -->
    <TextView
        android:id="@+id/description"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/title"
        android:textColor="#343434"
         android:layout_marginLeft="10dp"
        android:textSize="10dip"
        android:layout_marginTop="1dip"
        android:layout_toRightOf="@+id/thumbnail"
       />

    <LinearLayout
        android:layout_width="130dp"
        android:layout_height="wrap_content"
       android:layout_below="@+id/thumbnail"
        android:layout_alignParentBottom="true" 
        android:padding="3dip"
        android:layout_alignParentLeft="true">

        <TextView
            android:id="@+id/txtPubDate"
            android:text=""
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="10sp"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:textColor="#97999C" />
    </LinearLayout>

</RelativeLayout>

MyListAdapter.java

public class MyListAdapter extends BaseAdapter
{
     static class LazyViewHolder
     {
         TextView title;
         TextView description;
         ImageView thumb_image;
         WebView imageWebView;
         TextView pubDate;

         String myTitle;
         String mydescription;
         String bitmapUrl;

     }
      public MyListAdapter(Context ctx, List<News> getList) 
      {
            mContext = ctx;
            data=getList;
            inflater =LayoutInflater.from(ctx);

            imageLoader=new ImageLoader(ctx);
        }
    @Override
    public int getCount()
    {
        // TODO Auto-generated method stub
        return data.size();
    }

    @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 boolean isEnabled(int position) 
    {
        // TODO Auto-generated method stub
        return true;
    }
    @Override
     public View getView(int position, View convertView, ViewGroup parent)
    {
        View vi=convertView;
        LazyViewHolder viewHolder;
        if(convertView==null)
            vi = inflater.inflate(R.layout.list_row,null);

        viewHolder = new LazyViewHolder();

        viewHolder.title = (TextView)vi.findViewById(R.id.title); // title
        viewHolder.description = (TextView)vi.findViewById(R.id.description); // artist name
       viewHolder.pubDate = (TextView)vi.findViewById(R.id.txtPubDate);


                News song = data.get(position);

               myTitle =song.getTitle();


               //Set description
              mydescription =Html.fromHtml(song.getBody()).toString(); 


               // Set image
              bitmapUrl = song.getBigImage();

               //Set date
             myDate = song.getPublishedDate();





        StringBuilder sb = new StringBuilder(myTitle);

        int i = 0;
        while ((i = sb.indexOf(" ", i + 40)) != -1) {
            sb.replace(i, i + 1, "\n");
        }
        viewHolder.title.setText(sb.toString());


        mydescription = mydescription.substring(0, Math.min(mydescription.length(), 50));
        viewHolder.description.setText(mydescription);



         viewHolder.thumb_image=(ImageView)vi.findViewById(R.id.list_image); // thumb image
         imageLoader.DisplayImage(bitmapUrl, viewHolder.thumb_image);






        return vi;
    }
}
公共类MyListAdapter扩展BaseAdapter
{
静态类LazyViewHolder
{
文本视图标题;
文本视图描述;
ImageView拇指图像;
网络视图图像网络视图;
文本视图发布日期;
字符串myTitle;
字符串mydescription;
字符串位图URL;
}
公共MyListAdapter(上下文ctx,列表getList)
{
mContext=ctx;
数据=获取列表;
充气机=从(ctx)开始的充气机;
imageLoader=新的imageLoader(ctx);
}
@凌驾
public int getCount()
{
//TODO自动生成的方法存根
返回data.size();
}
@凌驾
公共对象getItem(int位置)
{
//TODO自动生成的方法存根
返回位置;
}
@凌驾
公共长getItemId(int位置)
{
//TODO自动生成的方法存根
返回位置;
}
@凌驾
公共布尔值isEnabled(整型位置)
{
//TODO自动生成的方法存根
返回true;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图)
{
视图vi=转换视图;
懒散的观景台;
if(convertView==null)
vi=充气机充气(右布局列表,空);
viewHolder=新的LazyViewHolder();
viewHolder.title=(TextView)vi.findViewById(R.id.title);//title
viewHolder.description=(TextView)vi.findViewById(R.id.description);//艺术家姓名
viewHolder.pubDate=(TextView)vi.findViewById(R.id.txtPubDate);
新闻歌曲=data.get(位置);
myTitle=song.getTitle();
//集合描述
mydescription=Html.fromHtml(song.getBody()).toString();
//设置图像
bitmapUrl=song.getBigImage();
//设定日期
myDate=song.getPublishedDate();
StringBuilder sb=新StringBuilder(myTitle);
int i=0;
而((i=sb.indexOf(“,i+40))!=-1){
sb.替换(i,i+1,“\n”);
}
viewHolder.title.setText(sb.toString());
mydescription=mydescription.substring(0,Math.min(mydescription.length(),50));
viewHolder.description.setText(mydescription);
viewHolder.thumb_image=(ImageView)vi.findviewbyd(R.id.list_image);//thumb image
imageLoader.DisplayImage(位图URL、viewHolder.thumb\u图像);
返回vi;
}
}

行xml和getview中可以有两个相对布局,您可以这样做

if(position % 2 == 0)
{
    // This will be true for 0, 2, 4... rows
    // make firstRelativeView Gone
    // make secondRelativeView Visible
}
else
{
    //This will be true for 1,3,5,,.. rows
    // make firstRelativeView Visible
    // make secondRelativeView Gone
}
两个relativeLayouts都有缩略图、标题和描述,但方向相反。在此if else中设置图像、标题和描述

此外,您还可以点击以下链接。这是一篇关于如何在listview中膨胀多个视图的教程


第一种方式:

创建两行布局,一行在左侧,另一行在右侧。在适配器中,重写
getViewTypeCount()
并返回
2
。覆盖
getItemViewType(int-position)
并返回
0
用于一种行布局,返回
1
用于另一种(如果需要,可以定义常量,但这些是需要返回的值)。最后,在
getView()
中,您可以为给定的位置调用
getItemViewType()
,并对返回的值进行切换。这将确定要充气的行布局等

第二种方式:


使用
android:visibility=“gone”
制作一行布局,两侧各有一个图像。对所有行使用相同的布局,并使用
setVisibility(View.visible)
使两个图像中的一个可见。选择要以任何方式显示的图像。(确保在另一个图像上调用
setVisibility(View.GONE)
,以防此行被回收,而另一个图像先前已可见。)

您需要定义两个布局,一个用于左侧,一个用于右侧,具有相同的组件ID

而不是在适配器中(假设您使用的是游标适配器)

//试试这个方法,希望能帮你解决问题。。。
**list_row.xml**
**MyListAdapter.java**
公共类MyListAdapter扩展了BaseAdapter
{
静态类LazyViewHolder
{
线性布局;
ImageView-imgLeft;
TextView txtLeftTitle;
TextView txtLeftDescription;
TextView txtLeftPubDate;
线性布局正确;
图像视图不清晰;
TextView txtRightTitle;
TextView txtRightDescription;
TextView txtRightPubDate;
}
私人语境;
私人列表新闻列表;
私有图像加载器;
公共MyListAdapter(上下文、列表新闻列表)
{
上下文=上下文;
新闻列表=新闻列表;
imageLoader=新的imageLoader(上下文);
}
@凌驾
public int getCount()
{
返回newsList.size();
}
@凌驾
公众的
    private int getItemViewType(Cursor cursor) {
        //some method that returns 1 for left layout, 0 for right layout
    }

    @Override
    public int getViewTypeCount() {
        return 2; //return 2 view types
    }

    @Override
    public void bindView(View view, Context context, Cursor cursor) {
        ViewHolder viewHolder = (ViewHolder) view.getTag();
        //bind your view
    }

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        int type = getItemViewType(cursor);
        int layout;
        switch (type) {
            case 1:
                layout = R.layout.row_left; //left layout
                break;
            case 0:
                layout = R.layout.row_right; //right layout
                break;
            default:
                throw new RuntimeException("Unknown view type!");
        }
        View view = LayoutInflater.from(context).inflate(layout, parent, false);
        ViewHolder viewHolder = new ViewHolder();
        //initialize ViewHolder using same ids.
        view.setTag(viewHolder);
        return view;
    }
// Try this way,hope this will help you to solve your problem...

**list_row.xml**

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:id="@+id/lnrLeft"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginRight="30dp">

        <ImageView
            android:id="@+id/imgLeft"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:src="@drawable/ic_launcher"/>

        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:orientation="vertical"
            android:layout_marginLeft="10dp">

            <TextView
                android:id="@+id/txtLeftTitle"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="#040404"
                android:typeface="sans"
                android:textSize="15sp"
                android:textStyle="bold"/>

            <TextView
                android:id="@+id/txtLeftDescription"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:textColor="#343434"
                android:textSize="12sp"
                android:layout_marginTop="5dp"/>


            <TextView
                android:id="@+id/txtLeftPubDate"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="12sp"
                android:textAppearance="?android:attr/textAppearanceSmall"
                android:textColor="#97999C"
                android:layout_marginTop="5dp"/>
        </LinearLayout>
    </LinearLayout>

    <LinearLayout
        android:id="@+id/lnrRight"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="30dp">

        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:orientation="vertical"
            android:layout_marginLeft="10dp">

            <TextView
                android:id="@+id/txtRightTitle"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="#040404"
                android:typeface="sans"
                android:textSize="15sp"
                android:textStyle="bold"/>

            <TextView
                android:id="@+id/txtRightDescription"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:textColor="#343434"
                android:textSize="12sp"
                android:layout_marginTop="5dp"/>


            <TextView
                android:id="@+id/txtRightPubDate"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="12sp"
                android:textAppearance="?android:attr/textAppearanceSmall"
                android:textColor="#97999C"
                android:layout_marginTop="5dp"/>
        </LinearLayout>
        <ImageView
            android:id="@+id/imgRight"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:src="@drawable/ic_launcher"/>
    </LinearLayout>

</LinearLayout>

**MyListAdapter.java**

public class MyListAdapter extends BaseAdapter
    {
        static class LazyViewHolder
        {
            LinearLayout lnrLeft;
            ImageView imgLeft;
            TextView txtLeftTitle;
            TextView txtLeftDescription;
            TextView txtLeftPubDate;
            LinearLayout lnrRight;
            ImageView imgRight;
            TextView txtRightTitle;
            TextView txtRightDescription;
            TextView txtRightPubDate;

        }

        private Context context;
        private List<News> newsList;
        private ImageLoader imageLoader;
        public MyListAdapter(Context context, List<News> newsList)
        {
            context = context;
            newsList=newsList;
            imageLoader=new ImageLoader(context);
        }
        @Override
        public int getCount()
        {
            return newsList.size();
        }

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

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

        @Override
        public boolean isEnabled(int position)
        {
            return true;
        }
        @Override
        public View getView(int position, View convertView, ViewGroup parent)
        {
            LazyViewHolder viewHolder;
            if(convertView==null) {
                convertView = LayoutInflater.from(context).inflate(R.layout.list_row, null,false);

                viewHolder = new LazyViewHolder();

                viewHolder.lnrLeft = (LinearLayout) convertView.findViewById(R.id.lnrLeft);
                viewHolder.imgLeft = (ImageView) convertView.findViewById(R.id.imgLeft);
                viewHolder.txtLeftTitle = (TextView) convertView.findViewById(R.id.txtLeftTitle);
                viewHolder.txtLeftDescription = (TextView) convertView.findViewById(R.id.txtLeftDescription);
                viewHolder.txtLeftPubDate = (TextView) convertView.findViewById(R.id.txtLeftPubDate);

                viewHolder.lnrRight= (LinearLayout) convertView.findViewById(R.id.lnrRight);
                viewHolder.imgRight = (ImageView) convertView.findViewById(R.id.imgRight);
                viewHolder.txtRightTitle = (TextView) convertView.findViewById(R.id.txtRightTitle);
                viewHolder.txtRightDescription = (TextView) convertView.findViewById(R.id.txtRightDescription);
                viewHolder.txtRightPubDate = (TextView) convertView.findViewById(R.id.txtRightPubDate);

                convertView.setTag(viewHolder);
            }else{
                viewHolder = (LazyViewHolder) convertView.getTag();
            }

            StringBuilder sb = new StringBuilder(data.get(position).getTitle());
            int i = 0;
            while ((i = sb.indexOf(" ", i + 40)) != -1) {
                sb.replace(i, i + 1, "\n");
            }

            if(position%2==0){
                viewHolder.lnrLeft.setVisibility(View.VISIBLE);
                viewHolder.lnrRight.setVisibility(View.GONE);
                imageLoader.DisplayImage(data.get(position).getBigImage(), viewHolder.imgLeft);

                viewHolder.txtLeftTitle.setText(sb.toString());
                viewHolder.txtLeftDescription.setText(Html.fromHtml(data.get(position).getBody()).toString());
                viewHolder.txtLeftPubDate.setText(data.get(position).getPublishedDate());
            }else{
                viewHolder.lnrRight.setVisibility(View.VISIBLE);
                viewHolder.lnrLeft.setVisibility(View.GONE);
                imageLoader.DisplayImage(data.get(position).getBigImage(), viewHolder.imgRight);

                viewHolder.txtRightTitle.setText(sb.toString());
                viewHolder.txtRightDescription.setText(Html.fromHtml(data.get(position).getBody()).toString());
                viewHolder.txtRightPubDate.setText(data.get(position).getPublishedDate());
            }

            return convertView;
        }
}