在ArrayAdapter按钮自定义视图 [英] Custom view with button in ArrayAdapter

查看:139
本文介绍了在ArrayAdapter按钮自定义视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经为我的 ArrayAdapter 的ListView ,增加了一个<$定义的自定义视图(XML) C $ C>按钮。我想创建一个 OnClickListener 按钮行,但没有创建自定义适配器。这是可能的,还是Android的逼我创建自定义的 ArrayAdapter 我的的ListView

下面是我在做什么的一个片段:


  glAdapter =新ArrayAdapter&LT;组&gt;(getActivity(),R.layout.fragment_grouprow,R.id.groupRowText,ListOfGroups);
ListView控件groupListView =(ListView控件)mainView.findViewById(R.id.listViewGroupMain);
groupListView.setAdapter(glAdapter);
groupListView.setOnItemClickListener(新AdapterView.OnItemClickListener(){
    @覆盖
      公共无效onItemClick(适配器视图&LT;&GT;母公司,观景,INT位置,长的id){
          //调用函数
      }
});


现在我想添加一个 OnClickListener 在我的自定义视图中的按钮


解决方案

您必须实现你自己的适配器和 getView()方法来设置 OnClickListener 你的按钮。在这里揭开序幕例如:

 公共类CustomAdapter扩展ArrayAdapter&LT;整数GT; {
    私人的ListView ListView的;    公共CustomAdapter(上下文的背景下,INT textViewResourceId,整数[]对象,ListView控件的ListView){
        超(背景下,textViewResourceId,对象);
        this.listView = ListView的;
    }
    静态类ViewHolder {
        TextView的文本;
        按钮BTN;
    }    @覆盖
    公共查看getView(最终诠释的立场,观点convertView,父母的ViewGroup){
        整色=的getItem(位置);        查看rowView = convertView;        如果(rowView == NULL){
            LayoutInflater充气=((活动)的getContext())getLayoutInflater();
            rowView = inflater.inflate(R.layout.list_view_row,父母,假);
            ViewHolder H =新ViewHolder();
            h.text =(TextView中)rowView.findViewById(R.id.item_text);
            h.btn = rowView.findViewById(R.id.btn);
            rowView.setTag(H);
        }        ViewHolder H =(ViewHolder)rowView.getTag();        h.text.setText(颜色);
        h.indicator.setOnClickListener(新View.OnClickListener(){
            @覆盖
            公共无效的onClick(视图v){
                //你想在BTN点击收到那里。
            }
        });        返回rowView;
    }
}

ViewHolder这里进行优化。你可以阅读有关此的。

I have defined a custom view (xml) for my ArrayAdapter for a ListView, which adds a Button. I'd like to create an OnClickListener for this Button per row, but without creating a custom adapter. Is that possible, or does Android force me to create a custom ArrayAdapter for my ListView?

Here's a snippet of what I'm doing:

glAdapter = new ArrayAdapter<Group>(getActivity(), R.layout.fragment_grouprow, R.id.groupRowText, ListOfGroups);
ListView groupListView = (ListView)mainView.findViewById(R.id.listViewGroupMain);
groupListView.setAdapter(glAdapter);
groupListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
          // Call function
      }
});

Now I'd like to add an OnClickListener for the Button in my custom view.

解决方案

You have to implement you own Adapter and in getView() method set OnClickListener on your button. Here kick off example:

public class CustomAdapter extends ArrayAdapter<Integer> {
    private ListView listView;

    public CustomAdapter(Context context, int textViewResourceId, Integer[] objects, ListView listView) {
        super(context, textViewResourceId, objects);
        this.listView = listView;
    }


    static class ViewHolder {
        TextView text;
        Button btn;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        Integer color = getItem(position);

        View rowView = convertView;

        if (rowView == null) {
            LayoutInflater inflater = ((Activity) getContext()).getLayoutInflater();
            rowView = inflater.inflate(R.layout.list_view_row, parent, false);
            ViewHolder h = new ViewHolder();
            h.text = (TextView) rowView.findViewById(R.id.item_text);
            h.btn = rowView.findViewById(R.id.btn);
            rowView.setTag(h);
        }

        ViewHolder h = (ViewHolder) rowView.getTag();

        h.text.setText(color);
        h.indicator.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // DO what you want to recieve on btn click there.
            }
        });

        return rowView;
    }
}

ViewHolder here for optimization. You can read about this there.

这篇关于在ArrayAdapter按钮自定义视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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