繁体   English   中英

将onClickListener设置为自定义适配器

[英]Set onClickListener into custom adapter

大家好,我有这个适配器有2个button和2个textview

@Override
public View getView(int position, View view, ViewGroup parent) {
    if(view == null) {
        holder = new Holder();
        inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = inflater.inflate(R.layout.my_adapter, null);
        holder.result = (TextView)view.findViewById(R.id.description);
        holder.value = (TextView)view.findViewById(R.id.value);
        holder.add = (Button)view.findViewById(R.id.add);
        holder.subtract = (Button)view.findViewById(R.id.subtract);         

        myObject = getItem(position);
        holder.result.setText(myObject.result);
        holder.value.setText(myObject.value);

        view.setTag(holder);
    } else {
        holder = (Holder)view.getTag();
    }

    holder.add.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {
            // TODO Auto-generated method stub  
        }           
    });

    return view;
}

现在我的问题是:如果我想要当用户按下添加按钮时设置textview的文本(例如)5我该怎么做? 如果我放入onCLick方法

holder.result.setText("My text")设置最后一个textview的文本,而不是所选行项目的对应textview(我禁用了listview上的点击):

@Override
public boolean isEnabled(int position) {
    return false;
}

我的问题有什么解决方案吗?

您应该将代码放在适配器内的getView方法中,并记住使用对当前Button / TextVeiw引用,以便每个Button对应于特定的TextView

PS我发现你的代码中有一些东西检查出来:

@Override
public View getView(int position, View view, ViewGroup parent) {
    if(view == null) {
        holder = new Holder();
        inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = inflater.inflate(R.layout.my_adapter, null);
        holder.result = (TextView)view.findViewById(R.id.description);
        holder.value = (TextView)view.findViewById(R.id.value);
        holder.add = (Button)view.findViewById(R.id.add);
        holder.subtract = (Button)view.findViewById(R.id.subtract); 

        view.setTag(holder);
    } else {
        holder = (Holder)view.getTag();
    }       

    myObject = getItem(position);
    holder.result.setText(myObject.result);
    holder.value.setText(myObject.value);
    final TextView tv = holder.result;

    holder.add.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {
            tv.setText("bla bla");          
            }           
    });

    return view;
}

你混合了一些东西,getItem必须低于视图创建的东西。 首先创建视图,然后设置值。

@Override
public View getView(int position, View view, ViewGroup parent) {
if(view == null) {
    holder = new Holder();
    inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    view = inflater.inflate(R.layout.my_adapter, null);
    holder.result = (TextView)view.findViewById(R.id.description);
    holder.value = (TextView)view.findViewById(R.id.value);
    holder.add = (Button)view.findViewById(R.id.add);
    holder.subtract = (Button)view.findViewById(R.id.subtract);         
    view.setTag(holder);
} else {
    holder = (Holder)view.getTag();
}

myObject = getItem(position);
holder.result.setText(myObject.result);
holder.value.setText(myObject.value);

holder.add.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View view) {

     //What should happen here?

    }           
});

return view;

}

暂无
暂无

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

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