1

我想在我的应用程序中显示一个列表视图。每行应包含一个文本和一个图像。我已经使用 ArrayAdapter 来显示它,但是如何在文本之后插入图像。这是代码:

String lvr[]={"Android","iPhone","BlackBerry","AndroidPeople"};
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
list1 = (ListView) findViewById(R.id.cg_listview1);
list1.setAdapter(new ArrayAdapter<String>(this,R.layout.alerts , lvr));

这里的警报是我的布局,它只包含一个 textView。

4

3 回答 3

1

您需要创建一个自定义适配器来实现这一点。

public class ResultAdapter extends BaseAdapter {

    private final Context context;
    private final List<Result> results;

    public ResultAdapter(Context context, List<Result> results) {
        this.context = context;
        this.results = results;
    }    

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

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

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    }
}

创建一个用于存储文本和图像的 Result 类。在 getView 方法中,以编程方式或通过使用LayoutInflater从 XML 布局加载它来创建您的视图。

于 2010-12-21T09:01:36.323 回答
1

如果您想控制项目的布局在列表视图中的外观,您应该自定义实现ArrayAdapter

管理由任意对象数组支持的 ListView 的 ListAdapter。(...) 要使用 TextViews 以外的东西来显示数组,例如 ImageViews,或者要让 toString() 结果之外的一些数据填充视图,请覆盖 getView(int, View, ViewGroup) 以返回你想要的视图。

如果您只是在谷歌上搜索自定义 arrayadapter 示例,您应该会找到足够多的示例来展示如何实现它。两个这样的例子是:

祝你好运 :)

于 2010-12-21T09:02:58.340 回答
1

带有文本视图更改的代码。ArrayList 是通用的,但您必须使用 ArrayList 构造函数进行添加、插入和删除操作。

public class ListViewLearn extends Activity {

    public Button btnAddData;
    public ListView listShow;
    public listRayAdapter adapter;
    public ArrayList<Integer> tmpStrRay;
    public Resources mainRes;

    public void onCreate(Bundle savedInstanceState) {
        setContentView(R.layout.mainlistlayout);

        tmpStrRay = new ArrayList<Integer>();
        tmpStrRay.add(1);
        tmpStrRay.add(2);
        tmpStrRay.add(3);
        mainRes= getApplicationContext().getResources();
        adapter = new listRayAdapter(getApplicationContext(),R.layout.listitem, tmpStrRay);

        btnAddData = (Button) findViewById(R.id.btnAddData);

        btnAddData.setOnClickListener(clickit);
        listShow= (ListView) findViewById(R.id.listShow);
        listShow.setAdapter(adapter);

        super.onCreate(savedInstanceState);

    }

    final OnClickListener clickit = new OnClickListener(){

        @Override
        public void onClick(View v) {
            for (int xx=4; xx<=50; xx++){ 
                adapter.add(new Integer(xx));
            }
        }};

    class listRayAdapter extends ArrayAdapter<Integer>
    {
        private ArrayList<Integer> items;
        Bitmap tmpImg;

        public listRayAdapter(Context context, int textVwId, ArrayList<Integer> txtRay)
        {
            super(context,textVwId,txtRay);
            this.items = txtRay;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View newv= convertView;
            if (newv == null) {
                LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                newv = vi.inflate(R.layout.listitem, null);
            }
            if ((position%2)==0){
                tmpImg = BitmapFactory.decodeResource(mainRes, R.drawable.even);
            }else{
                tmpImg = BitmapFactory.decodeResource(mainRes, R.drawable.odd);
            }

            ImageView img = (ImageView) newv.findViewById(R.id.img);
            img.setImageBitmap(tmpImg);
            TextView tt= (TextView) newv.findViewById(R.id.listedItem);
            Integer tmpInt = new Integer(items.get(position));
            tt.setText(tmpInt.toString());
            return newv;
        }

    }
}
于 2011-04-19T10:22:06.237 回答