如何使用按钮的OnClick在自定义的ListView景观座 [英] How can i use Button OnClick in Custom ListView with View Holder

查看:195
本文介绍了如何使用按钮的OnClick在自定义的ListView景观座的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要一些帮助,我使用的是viewholder从动态arrayadapter显示。

我有列表视图。

每个行包含;


  • 标题(TextView的),

  • 副标题(TextView的),

  • 进度条

  • 下载按钮(按钮)。

我要显示进度条和隐藏下载按钮被点击下载按钮时。当第一排下载按钮点击后,第一个进度条显示,但8进度栏是显示了。

这是我的code。我在做什么错了?

 公共类TabInComingAdaptor延伸BaseAdapter {    公共静态类ViewHolder {
        TextView的称号;
        TextView的说明;
        按钮DownloadButton;
        进度PB;
    }    私人的ArrayList< rowObject>数据;
    私人LayoutInflater吹气= NULL;
    私人应用AP;
    //最后的私人活动currentActivity;
    按钮progressButton1;
    INT的currentUser;    公共TabInComingAdaptor(活动活动,应用程序,
            ArrayList的< rowObject> GelenFakslar){
        // currentActivity =活动;
        AP =应用;
        数据= GelenFakslar;
        吹气=(LayoutInflater)AP
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }    公众诠释的getCount(){
        返回data.size();
    }    公共对象的getItem(INT位置){
        返回的位置;
    }    众长getItemId(INT位置){
        返回的位置;
    }    公共查看getView(最终诠释的立场,观点六,母公司的ViewGroup){
        ViewHolder viewHolder;
        如果(六== NULL){
            VI = inflater.inflate(R.layout.tab_incoming_row,父母,假);
            viewHolder =新ViewHolder();
            viewHolder.title =(TextView中)vi.findViewById(R.id.RowTitle);
            viewHolder.desc =(TextView中)vi.findViewById(R.id.RowDesc);
            viewHolder.DownloadButton =(按钮)六
                    .findViewById(R.id.RowDownloadButton);
            viewHolder.pB =(进度)六
                    .findViewById(R.id.RowDownloadProgress);            viewHolder.DownloadButton.setOnClickListener(新OnClickListener(){                @覆盖
                公共无效的onClick(视图v){
                    的LinearLayout vwParentRow =(的LinearLayout)v.getParent();
                    v.setVisibility(View.GONE);
                    进度ZXCV =(进度)vwParentRow.getChildAt(0);
                    zxcv.setVisibility(View.VISIBLE);
                    vwParentRow.refreshDrawableState();
                }
            });
            vi.setTag(viewHolder);
        }其他{
            viewHolder =(ViewHolder)vi.getTag();
        }        viewHolder.title.setText(data.get(位置).getBaslik());
        viewHolder.desc.setText(data.get(位置).getTarih());        返回VI;
    }
}


解决方案

这是我的解决方案。再次感谢@waqaslam和@ SweetWisherツ寻求帮助。

行对象(我有我的所有变量的getter和setter):

 公共类rowObject {
    INT ROWID;
    字符串称号;
    desc字符串;
    串FileUrl;
    字符串的文件路径;
    INT ButtonClicked;
}

GetView方法:

 公共查看getView(最终诠释的立场,观点六,母公司的ViewGroup){    如果(六== NULL){
        VI = inflater.inflate(R.layout.tab_incoming_row,父母,假);
        viewHolder =新ViewHolder();
        viewHolder.title =(TextView中)vi.findViewById(R.id.RowTitle);
        viewHolder.desc =(TextView中)vi.findViewById(R.id.RowDesc);
        viewHolder.DownloadButton =(按钮)六
                .findViewById(R.id.RowDownloadButton);
        viewHolder.pB =(进度)六
                .findViewById(R.id.RowDownloadProgress);
        vi.setTag(viewHolder);
    }其他{
        viewHolder =(ViewHolder)vi.getTag();
    }    viewHolder.title.setText(data.get(位置).getBaslik());
    viewHolder.desc.setText(data.get(位置).getTarih());
    viewHolder.DownloadButton.setOnClickListener(新OnClickListener(){
        @覆盖
        公共无效的onClick(视图v){
            data.get(位置).setButtonClicked(1);
            新DownloadTask(currentActivity,位置).execute();
        }
    });    如果(data.get(位置).getButtonClicked()== 1){
        viewHolder.DownloadButton.setVisibility(View.GONE);
        viewHolder.pB.setVisibility(View.VISIBLE);
    }其他{
        viewHolder.DownloadButton.setVisibility(View.VISIBLE);
        viewHolder.pB.setVisibility(View.GONE);
    }
    返回VI;
}

,然后我会使用的AsyncTask如此职位

I need some help, i am using a viewholder to display from a dynamic arrayadapter.

I have list view .

Each row contains ;

  • Title (Textview),
  • sub title(TextView),
  • Progress bar
  • Download Button (Button).

I want to show progress bar and hide Download Button when Download Button is clicked. When download button in first row clicked, first progress bar is showing but 8th progress bar is showing too.

This is my code. what i am doing wrong?

    public class TabInComingAdaptor extends BaseAdapter {

    public static class ViewHolder {
        TextView title;
        TextView desc;
        Button DownloadButton;
        ProgressBar pB;
    }

    private ArrayList<rowObject> data;
    private LayoutInflater inflater = null;
    private Application ap;
    // final private Activity currentActivity;
    Button progressButton1;
    int CurrentUser;

    public TabInComingAdaptor(Activity activity, Application application,
            ArrayList<rowObject> GelenFakslar) {
        // currentActivity = activity;
        ap = application;
        data = GelenFakslar;
        inflater = (LayoutInflater) ap
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    public int getCount() {
        return data.size();
    }

    public Object getItem(int position) {
        return position;
    }

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

    public View getView(final int position, View vi, ViewGroup parent) {
        ViewHolder viewHolder;
        if (vi == null) {
            vi = inflater.inflate(R.layout.tab_incoming_row, parent, false);
            viewHolder = new ViewHolder();
            viewHolder.title = (TextView) vi.findViewById(R.id.RowTitle);
            viewHolder.desc = (TextView) vi.findViewById(R.id.RowDesc);
            viewHolder.DownloadButton = (Button) vi
                    .findViewById(R.id.RowDownloadButton);
            viewHolder.pB = (ProgressBar) vi
                    .findViewById(R.id.RowDownloadProgress);

            viewHolder.DownloadButton.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    LinearLayout vwParentRow = (LinearLayout) v.getParent();
                    v.setVisibility(View.GONE);
                    ProgressBar zxcv = (ProgressBar) vwParentRow.getChildAt(0);
                    zxcv.setVisibility(View.VISIBLE);
                    vwParentRow.refreshDrawableState();
                }
            });
            vi.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) vi.getTag();
        }

        viewHolder.title.setText(data.get(position).getBaslik());
        viewHolder.desc.setText(data.get(position).getTarih());

        return vi;
    }
}

解决方案

That's my solution. Thanks again @waqaslam and @ SweetWisher ツ for help.

Row Object (i have getters and setters for all of my variables):

public class rowObject {
    int Rowid;
    String title;
    String desc;
    String FileUrl;
    String FilePath;
    int ButtonClicked;
}

GetView Method:

public View getView(final int position, View vi, ViewGroup parent) {

    if (vi == null) {
        vi = inflater.inflate(R.layout.tab_incoming_row, parent, false);
        viewHolder = new ViewHolder();
        viewHolder.title = (TextView) vi.findViewById(R.id.RowTitle);
        viewHolder.desc = (TextView) vi.findViewById(R.id.RowDesc);
        viewHolder.DownloadButton = (Button) vi
                .findViewById(R.id.RowDownloadButton);
        viewHolder.pB = (ProgressBar) vi
                .findViewById(R.id.RowDownloadProgress);
        vi.setTag(viewHolder);
    } else {
        viewHolder = (ViewHolder) vi.getTag();
    }

    viewHolder.title.setText(data.get(position).getBaslik());
    viewHolder.desc.setText(data.get(position).getTarih());
    viewHolder.DownloadButton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            data.get(position).setButtonClicked(1);
            new DownloadTask(currentActivity, position).execute();
        }
    });

    if (data.get(position).getButtonClicked() == 1) {
        viewHolder.DownloadButton.setVisibility(View.GONE);
        viewHolder.pB.setVisibility(View.VISIBLE);
    } else {
        viewHolder.DownloadButton.setVisibility(View.VISIBLE);
        viewHolder.pB.setVisibility(View.GONE);
    }
    return vi;
}

And then i will use AsyncTask like This Post

这篇关于如何使用按钮的OnClick在自定义的ListView景观座的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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