水平显示项目?

时间:2012-02-02 09:41:16

标签: android listview android-gallery horizontallist

我只想从RSS-Feed显示一些图像数据。我的RSS源代码工作正常,从Feed中正确加载,但我无法以水平方式显示图像?我尝试使用Gallery但无法将图像放入其中?有没有办法实现同样的目标?

我还引用链接http://www.dev-smart.com/archives/34来实现Horizo​​ntal ListView,但是我无法将onClickListener实现到列表中。请帮忙。谢谢。

我为图库试过的代码..

public class ImageAdapter扩展了BaseAdapter {

int imageBackground;
private List<RSSIteam> objects = null;
private Context context;

public ImageAdapter(Context c)
{
    context = c;
    TypedArray ta = obtainStyledAttributes(R.styleable.Gallery1);
    imageBackground = ta.getResourceId(R.styleable.Gallery1_android_galleryItemBackground, 1);
    ta.recycle();
}

public ImageAdapter(Context context, int textViewResourceId, List<RSSIteam> objects) 
{
    super();
    this.context = context;
    this.objects = objects;
}

    @Override
    public int getCount() 
    {
        return this.objects.size();
        //return pics.length;

    }

    @Override
    public Object getItem(int position) 
    {
        return this.objects.get(position);
        //return position;
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) 
    {
        RSSIteam data = (RSSIteam) getItem(position);
        String imageUrl = data.imageurl;
        try 
    {
            URL feedImage = new URL(imageUrl);
            HttpURLConnection conn= (HttpURLConnection)feedImage.openConnection();
            InputStream is = conn.getInputStream();
            Bitmap img = BitmapFactory.decodeStream(is);



        } 
    catch (MalformedURLException e) 
    {
            e.printStackTrace();
        } 
    catch (IOException e) 
    {
            e.printStackTrace();
        }



        ImageView iv = new ImageView(context);
        iv.setImageResource(img[position]);  //here i am unable to set the image in particular position because it require int type array
        iv.setScaleType(ImageView.ScaleType.FIT_XY);
        iv.setLayoutParams(new Gallery.LayoutParams(90,70));
    iv.setBackgroundResource(imageBackground);
    return iv;

    }

}

2 个答案:

答案 0 :(得分:0)

您可以使用galleryholder.xml。这个xml包含imageview,它由适配器和返回视图进行膨胀,并且适配器在库中填充了这个视图。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="100dp"
    android:layout_height="fill_parent"
    android:background="@drawable/my_border"
    android:orientation="vertical"
    android:padding="5dp" >


            <ImageView
                android:id="@+id/storyImage"
                android:layout_width="fill_parent"
                android:layout_height="70dp"
                android:scaleType="fitXY" />

</LinearLayout>

and use Image adapter to fill the gallery

galleryID.setAdapter(new ImageAdapter());  

Image Adapter code


  @Override
        public View getView(int position, View convertView, ViewGroup parent) 
        {
    LayoutInflater layoutInflater=(LayoutInflater)
                    context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View view=(View)layoutInflater.inflate(R.layout.galleryholder,parent,false);
      ImageView iv;
            if(convertView==null){

                convertView=view;
                iv=(ImageView)view.findViewById(R.id.storyImage);

            }
            RSSIteam data = (RSSIteam) getItem(position);
            String imageUrl = data.imageurl;
            try 
        {
                URL feedImage = new URL(imageUrl);
                HttpURLConnection conn= (HttpURLConnection)feedImage.openConnection();
                InputStream is = conn.getInputStream();
                Bitmap img = BitmapFactory.decodeStream(is);



            } 
        catch (MalformedURLException e) 
        {
                e.printStackTrace();
            } 
        catch (IOException e) 
        {
                e.printStackTrace();
            }



            iv.setImageResource(img[position]);  //here i am unable to set the image in particular position because it require int type array
            iv.setScaleType(ImageView.ScaleType.FIT_XY);
            iv.setLayoutParams(new Gallery.LayoutParams(90,70));
        iv.setBackgroundResource(imageBackground);
        return convertView;

        }

答案 1 :(得分:0)

请看下面的代码,这将为您提供全面的帮助。工作正常

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        /*
         * // here i am setting the text color and bckgroung of layout //
         * According to time if (6 <= (new Date()).getHours() && (new
         * Date()).getHours() <= 17) { ll.setBackgroundColor(Color.BLACK);
         * label.setTextColor(Color.WHITE); } else {
         * ll.setBackgroundColor(Color.WHITE);
         * label.setTextColor(Color.BLACK); }
         */
        // return (row);

        View v = convertView;
        if (v == null) {

            LayoutInflater inflater = context.getLayoutInflater();
            v = inflater.inflate(R.layout.myrow, null);
        }
        Item o = itemsCmn.get(position);
        if (o != null) {
            TextView tt = (TextView) v.findViewById(R.id.label);
            ImageView icon = (ImageView) v.findViewById(R.id.icon);
            if (tt != null) {
                tt.setText(o.getTitle());
            }
            else{

            }
            if (icon != null) {
                if (o.getImg() != null) {
                    icon.setImageBitmap(BitmapFactory.decodeByteArray(
                            o.getImg(), 0, o.getImg().length));
                }else{
                    icon.setImageResource(R.drawable.images);
                }
            }
        }
        return v;
    }// getView