繁体   English   中英

如何在 ListView 适配器中单击按钮应用功能

[英]How to apply function on button click in ListView adapter

使用此代码,我可以在 Android 中显示 Listview:

listView = (ListView) layout.findViewById(R.id.listView1);
        Notifcationadapter adapter = new Notifcationadapter(this, notifies);
        listView.setAdapter(adapter);
        listView.setOnItemClickListener(this);


public class Notifcationadapter extends BaseAdapter {
    private static ArrayList<Notify> values;
    Context context;
    // List<RowItem> rowItems;
    ViewHolder holder = null;

    LinearLayout linear2;

    DataBaseManager dbManager = new DataBaseManager(context);
    ArrayList<Notify> notifies;

    public Notifcationadapter(Context context, ArrayList<Notify> notifies) {
        super();
        this.context = context;
        this.notifies = notifies;
    }

    /* private view holder class */
    private class ViewHolder {

        TextView txtTitle;
        TextView txtDesc;
        ImageView yesimage;
        ImageView runningimage;
        ImageView noimage;
        TextView revresetime;

        TextView rejected;

        LinearLayout linear2;
    }

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

        LayoutInflater mInflater = (LayoutInflater) context
                .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.notifcationlistitem, null);
            holder = new ViewHolder();
            holder.linear2 = (LinearLayout) convertView
                    .findViewById(R.id.linear2);
            holder.txtDesc = (TextView) convertView.findViewById(R.id.desc);

            holder.txtTitle = (TextView) convertView.findViewById(R.id.title);
            holder.yesimage = (ImageView) convertView
                    .findViewById(R.id.imageView1);
            holder.noimage = (ImageView) convertView
                    .findViewById(R.id.imageView2);
            holder.revresetime = (TextView) convertView
                    .findViewById(R.id.revresetime);
            holder.rejected = (TextView) convertView
                    .findViewById(R.id.rejectedrequest);

            holder.runningimage = (ImageView) convertView
                    .findViewById(R.id.runnimage);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        // holder.txtTitle.setText("Title");
        String statustype = notifies.get(position).getNotificationType();

        if (statustype.equals("1")) {

            holder.txtDesc.setText(notifies.get(position)
                    .getNotificationDescrpiton());

            holder.revresetime.setText(Functions
                    .setLastSeenNotifcationTime(notifies.get(position)
                            .getNotificationDatetime()));
            holder.txtTitle.setText("Request For travelling");
            holder.yesimage.setVisibility(View.VISIBLE);
            holder.noimage.setVisibility(View.VISIBLE);

            holder.yesimage.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View arg0) {
                    // TODO Auto-generated method stub

                    Toast.makeText(context, "Yes", 10000).show();
                    holder.yesimage.setVisibility(View.GONE);
                    holder.noimage.setVisibility(View.GONE);
                    // holder.linear2.setVisibility(View.INVISIBLE);
                    holder.runningimage.setVisibility(View.VISIBLE);
                }
            });

            holder.noimage.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    Toast.makeText(context, "NO", 10000).show();
                    // holder.linear2.setVisibility(View.INVISIBLE);
                    holder.yesimage.setVisibility(View.GONE);
                    holder.noimage.setVisibility(View.GONE);
                    holder.rejected.setVisibility(View.VISIBLE);
                }
            });
        }

        else {

            holder.txtDesc.setText(notifies.get(position)
                    .getNotificationDescrpiton());
            holder.txtTitle.setText("Post");
            holder.revresetime.setText(Functions
                    .setLastSeenNotifcationTime(notifies.get(position)
                            .getNotificationDatetime()));
            holder.yesimage.setVisibility(View.GONE);
            holder.noimage.setVisibility(View.GONE);
        }

        if (position % 2 == 0) {

            convertView.setBackgroundColor(Color.parseColor("#ffffff"));
        }

        else {
            convertView.setBackgroundColor(Color.parseColor("#f5f6f1"));
        }

        return convertView;
    }

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

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

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

这是我的适配器类我的 Listview 打印像这样在此处输入图片说明

我已经应用是而不是按钮单击功能但是当我单击第一个项目是按钮而不是项目第二个数据不可见我不知道为什么会这样。 我想要当我点击是 (-/) 然后是和否图像按钮都应该隐藏应该有文本视图可见它正在发生但是当我第一次点击时它不是每个项目然后它消失第二个或第四个项目像这样请检查我的适配器在哪里做错了。

我建议你在你的按钮(是和没有按钮)布局上使用 android:

onclick="yesHandle"

onclick="noHandle"

然后在你的活动中,创建两个方法:

public void yesHandle(View v){
   final int positionRow = listView.getPositionForView((View) v.getParent());
   //TODO rest 
   adapter.notifyDataSetChanged();
}

public void noHandle(View v){
   final int positionRow = listView.getPositionForView((View) v.getParent());
   //TODO rest
   adapter.notifyDataSetChanged();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM