动态添加布局到适配器的机器人getview方法 [英] dynamically add layout into getview method of adaptor in android

查看:120
本文介绍了动态添加布局到适配器的机器人getview方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要显示的列表视图中的每一行N多的ImageView的。 ImageView的数量取决于JSON解析值。它可以是2或3或4每次当我获取JSON从服务器。

所以我不能用inflate.so我决定在getview方法创建动态视图,并添加ImageView的N个眼帘使用静态XML

我写下面的code,但它仍然只显示一个ImageView的和水平滚动不会在所有的工作。

任何帮助是pciated AP $ P $

 公共类MyAdapter扩展了BaseAdapter {
私人LayoutInflater充气;
私人的ArrayList<字符串>数据;
语境CON;

公共MyAdapter(上下文的背景下,ArrayList的<字符串>数据1){
//缓存LayoutInflater更快使用
      充气=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//设置事件的数据
数据= DATA1;
CON =背景;
}

公共查看getView(INT位置,查看查看,ViewGroup中的ViewGroup){
    ViewHolder持有人=新ViewHolder(); //我们认为该行持有人
    如果(查看== NULL){

        Horizo​​ntalScrollView HR =新Horizo​​ntalScrollView(CON);
        的LinearLayout布局=新的LinearLayout(CON);
        layout.setLayoutParams(新LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));

           //布局设置一些属性
           的for(int i = 1;我2;我++)
           {
            holder.image =新ImageView的(CON);
            LinearLayout.LayoutParams的LayoutParams =新LinearLayout.LayoutParams(100 * I,100 * I);
            holder.image.setLayoutParams(的LayoutParams);
            layout.addView(holder.image);
           }
           //字幕设置一些属性

       //产生通过code中的布局
           hr.addView(布局);

       鉴于=小时; // INSTEAD OF爆式布局的行我只是绑定IT TO最近创建的布局
       //绑定持有人的意见,布局的意见
           view.setTag(保持器);
           Log.w(MyApp的,新视图);
    }
    其他
    {
       支架=(ViewHolder)view.getTag();
       Log.w(中再利用的myapp);
    }
        //执行查看的休息
    的for(int i = 0;我2;我++)
    {
    holder.image.setImageResource(R.drawable.ic_launcher);
    }
        返回查看;
    }

静态类ViewHolder {
    ImageView的形象;
 TextView的称号;
 TextView的类型;
 Horizo​​ntalScrollView小时;
}

@覆盖
公众诠释getCount将(){
    // TODO自动生成方法存根
    返回4;
}

@覆盖
公共对象的getItem(INT位置){
    // TODO自动生成方法存根
    返回null;
}

@覆盖
众长getItemId(INT位置){
    // TODO自动生成方法存根
    返回1;
}
 }
 

解决方案

确认这是你想要我猜。刚刚成立的随机值图像中每行

 公共类MyAdapter扩展了BaseAdapter {
    私人LayoutInflater充气;
    私人的ArrayList<字符串>数据;
    语境CON;

    公共MyAdapter(上下文的背景下,ArrayList的<字符串>数据1){

        充气=(LayoutInflater)上下文
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        数据= DATA1;
        CON =背景;
    }

    公共查看getView(INT位置,查看查看,ViewGroup中的ViewGroup){
        ViewHolder持有人=新ViewHolder(); //我们认为该行持有人
        如果(查看== NULL){

            Horizo​​ntalScrollView HR =新Horizo​​ntalScrollView(CON);
            的LinearLayout布局=新的LinearLayout(CON);
            layout.setLayoutParams(新LinearLayout.LayoutParams(
                    LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
            的for(int i = 0; I< data.size();我++){
                holder.image =新ImageView的(CON);
                layout.addView(holder.image);
                holder.image.setImageResource(R.drawable.ic_launcher);
            }
            hr.addView(布局);
            鉴于=小时;

            view.setTag(保持器);

        }
        支架=(ViewHolder)view.getTag();

        返回查看;

    }

    @覆盖
    公众诠释getCount将(){
        // TODO自动生成方法存根
        返回data.size();
    }

    @覆盖
    公共对象的getItem(INT位置){
        // TODO自动生成方法存根
        返回null;
    }

    @覆盖
    众长getItemId(INT位置){
        // TODO自动生成方法存根
        返回1;
    }
}

类ViewHolder {
    ImageView的形象;
    TextView的称号;
    TextView的类型;
    Horizo​​ntalScrollView小时;
}
 

I want to display N number of imageview in every row of list view. Number of imageview depends on json parsing value. it can be 2 or 3 or 4 everytime when i fetch json from server.

so I can not use static xml by using inflate.so i decided to create dynamic view in getview method and add N number of imageview into view

I write following code but it still display only one imageview and horizontal scroll wont work at all..

any help is appreciated

public class MyAdapter extends BaseAdapter{
private LayoutInflater inflater;
private ArrayList<String> data;
Context con;

public MyAdapter(Context context, ArrayList<String> data1){
// Caches the LayoutInflater for quicker use
      inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// Sets the events data
data= data1;
con=context;
}

public View getView(int position, View view, ViewGroup viewgroup) {
    ViewHolder holder=new ViewHolder(); //our view holder of the row
    if (view == null) {

        HorizontalScrollView hr=new HorizontalScrollView(con);
        LinearLayout layout=new LinearLayout(con);
        layout.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));

           //layout set some properties
           for(int i=1;i<2;i++)
           {
            holder.image =new ImageView(con);
            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(100*i, 100*i);
            holder.image.setLayoutParams(layoutParams);
            layout.addView(holder.image);
           }
           //subtitle set some properties

       //CREATING THE LAYOUT THROUGH CODE
           hr.addView(layout);

       view = hr; //INSTEAD OF INFLATING A LAYOUT FOR THE ROW I JUST BINDED IT TO THE RECENTLY CREATED LAYOUT 
       //bind the views of the holder to the views of the layout
           view.setTag(holder);
           Log.w("myapp", "new view");
    } 
    else 
    {
       holder = (ViewHolder) view.getTag();
       Log.w("myapp", "in reuse");
    }
        //rest of implementation of the View
    for(int i=0;i<2;i++)
    {
    holder.image.setImageResource(R.drawable.ic_launcher);
    }
        return view;
    }

static class ViewHolder {
    ImageView image;
 TextView title;
 TextView type;
 HorizontalScrollView hr;
}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return 4;
}

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

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

解决方案

Check this is what you want I guess. Just set random value for each line in images

    public class MyAdapter extends BaseAdapter {
    private LayoutInflater inflater;
    private ArrayList<String> data;
    Context con;

    public MyAdapter(Context context, ArrayList<String> data1) {

        inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        data = data1;
        con = context;
    }

    public View getView(int position, View view, ViewGroup viewgroup) {
        ViewHolder holder = new ViewHolder(); // our view holder of the row
        if (view == null) {

            HorizontalScrollView hr = new HorizontalScrollView(con);
            LinearLayout layout = new LinearLayout(con);
            layout.setLayoutParams(new LinearLayout.LayoutParams(
                    LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
            for (int i = 0; i < data.size(); i++) {
                holder.image = new ImageView(con);
                layout.addView(holder.image);
                holder.image.setImageResource(R.drawable.ic_launcher);
            }
            hr.addView(layout);
            view = hr;

            view.setTag(holder);

        }
        holder = (ViewHolder) view.getTag();

        return view;

    }

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

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

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

class ViewHolder {
    ImageView image;
    TextView title;
    TextView type;
    HorizontalScrollView hr;
}

这篇关于动态添加布局到适配器的机器人getview方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆