Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 更改文本视图的文本,该文本视图为';通过按下同一适配器内的按钮,可以在阵列适配器内安装_Android_Android Arrayadapter_Clicklistener - Fatal编程技术网

Android 更改文本视图的文本,该文本视图为';通过按下同一适配器内的按钮,可以在阵列适配器内安装

Android 更改文本视图的文本,该文本视图为';通过按下同一适配器内的按钮,可以在阵列适配器内安装,android,android-arrayadapter,clicklistener,Android,Android Arrayadapter,Clicklistener,这是我在stackoverflow的第一个问题。 如果我做错了,请纠正我。 所以我们开始: 我试图在ArrayAdapter中创建一个按钮的onClickListener,该按钮在同一布局中更改TextView的文本。但实际情况是:当我单击按钮时,它会更改多个TextView的文本。 它是这样的:如果我按下列表的第一个按钮,它会改变5h、9th、13th的文本。。。。。为什么会这样 我希望有一个onClickListener来更改位于samelayout上的TextView的文本 PS:当我说“

这是我在stackoverflow的第一个问题。 如果我做错了,请纠正我。 所以我们开始:

我试图在ArrayAdapter中创建一个按钮的onClickListener,该按钮在同一布局中更改TextView的文本。但实际情况是:当我单击按钮时,它会更改多个TextView的文本。 它是这样的:如果我按下列表的第一个按钮,它会改变5h、9th、13th的文本。。。。。为什么会这样

我希望有一个onClickListener来更改位于samelayout上的TextView的文本

PS:当我说“按钮”时,它实际上是一个“图像视图”

适配器的代码:

public class ProductAdapter extends ArrayAdapter<Produtc> {

public ProductAdapter (Context context, ArrayList<Product> products) {
    super(context, 0, products);
}



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

    final ViewHolder viewHolder;
    final Product product = getItem(position);

    if (convertView == null) {
        convertView = LayoutInflater.from(getContext()).inflate(R.layout.layout_sliders, parent, false);

        viewHolder = new ViewHolder();
        viewHolder.textViewProductIndex = (TextView) convertView.findViewById(R.id.textViewIndex);
        viewHolder.textViewProductName = (TextView) convertView.findViewById(R.id.textViewProductName);
        viewHolder.textViewQuantity = (TextView) convertView.findViewById(R.id.textViewQuantity);
        viewHolder.imageViewADD = (ImageView) convertView.findViewById(R.id.buttonAdd);
        viewHolder.imageViewFILL = (ImageView) convertView.findViewById(R.id.buttonFill);
        viewHolder.imageViewCheck = (ImageView) convertView.findViewById(R.id.buttonCheck);

        convertView.setTag(viewHolder);
    } else {
        viewHolder = (ViewHolder) convertView.getTag();
    }



    if (produto != null) {

        viewHolder.textViewProductIndex.setText(product.getProductIndex());
        viewHolder.textViewProductName.setText(product.getProductName());

        viewHolder.imageViewADD.setTag(position);
        viewHolder.imageViewFILL.setTag(position);
        viewHolder.imageViewCheck.setTag(position);
        viewHolder.textViewProductIndex.setTag(position);
        viewHolder.textViewProductName.setTag(position);
        viewHolder.textViewQuantity.setTag(position);

        viewHolder.imageViewADD.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                viewHolder.textViewQuantity.setText("TESTING");
            }
        });

    }
    return convertView;
}

class ViewHolder {
    private TextView textViewProductIndex;
    private TextView textViewProductName;
    private TextView textViewQuantity;
    private ImageView imageViewADD;
    private ImageView imageViewFILL;
    private ImageView imageViewCheck;
}}
公共类ProductAdapter扩展了ArrayAdapter{
公共产品适配器(上下文、ArrayList产品){
超级(上下文,0,产品);
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
最终持票人;
最终产品=getItem(位置);
if(convertView==null){
convertView=LayoutInflater.from(getContext()).flate(R.layout.layout_滑块,父项,false);
viewHolder=新的viewHolder();
viewHolder.textViewProductIndex=(TextView)convertView.findViewById(R.id.textViewIndex);
viewHolder.textViewProductName=(TextView)convertView.findViewById(R.id.textViewProductName);
viewHolder.textViewQuantity=(TextView)convertView.findViewById(R.id.textViewQuantity);
viewHolder.imageViewADD=(ImageView)convertView.findViewById(R.id.ButtonAddd);
viewHolder.imageViewFILL=(ImageView)convertView.findViewById(R.id.buttonFill);
viewHolder.imageViewCheck=(ImageView)convertView.findViewById(R.id.buttonCheck);
convertView.setTag(viewHolder);
}否则{
viewHolder=(viewHolder)convertView.getTag();
}
if(produto!=null){
viewHolder.textViewProductIndex.setText(product.getProductIndex());
viewHolder.textViewProductName.setText(product.getProductName());
viewHolder.imageViewADD.setTag(位置);
viewHolder.imageViewFILL.setTag(位置);
viewHolder.imageViewCheck.setTag(位置);
viewHolder.textViewProductIndex.setTag(位置);
viewHolder.textViewProductName.setTag(位置);
viewHolder.textViewQuantity.setTag(位置);
viewHolder.imageViewADD.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
viewHolder.textViewQuantity.setText(“测试”);
}
});
}
返回视图;
}
类视图持有者{
私有文本视图文本视图产品索引;
私有TextView textViewProductName;
私有文本视图文本视图数量;
私有ImageView imageViewADD;
私有ImageView imageViewFILL;
私有ImageView imageViewCheck;
}}
其他疑问:

-我必须在setTag()上传递什么


-我是否应该在ListView的onItemClickListener上的setapAdapter之后处理clickListeners?

欢迎使用StackOverflow

这是因为列表视图正在重用视图以提高性能。所以第1、5、9视图实际上是相同的。当您执行
viewHolder=(viewHolder)convertView.getTag()时您正在重用现有视图,而不是创建新视图,这有利于提高性能。您还避免了
findViewById
调用

要解决问题,应该在每次getView()调用上设置
quantity
文本。类似于
viewHolder.textViewQuantity.setText(product.getQuantity())
。这将覆盖当前文本


至于
setTag
,它用于存储带有视图的任意对象,以便以后可以获取。这用于实现ViewHolder模式,但也有其他用途。不需要对视图持有者的每个属性调用setTag,只需要
convertView.setTag(viewHolder)

我会这样做:

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class ProductAdapter extends ArrayAdapter<Product> {

    private Context mContext;
    private ArrayList<Product> mProducts;

    public ProductAdapter(Context context, ArrayList<Product> products) {
        super(context, 0, products);
        this.mContext = context;
        this.mProducts = products;
    }


    public class ViewHolder {
        private final TextView textViewProductIndex;
        private final TextView textViewProductName;
        private final TextView textViewQuantity;
        private final ImageView imageViewADD;
        private final ImageView imageViewFILL;
        private final ImageView imageViewCheck;

        public ViewHolder(View v, final int position) {
            this.mTextViewProductIndex = (TextView) v.findViewById(R.id.textViewIndex);
            this.mTextViewProductName = (TextView) v.findViewById(R.id.textViewProductName);
            this.mTextViewQuantity = (TextView) v.findViewById(R.id.textViewQuantity);
            this.mImageViewADD = (ImageView) v.findViewById(R.id.buttonAdd);
            this.mImageViewFILL = (ImageView) v.findViewById(R.id.buttonFill);
            this.mImageViewCheck = (ImageView) v.findViewById(R.id.buttonCheck);
        }
    }

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

        View rowView = convertView;

        if (rowView == null) {
            LayoutInflater inflater = mContext.getLayoutInflater();
            rowView = inflater.inflate(R.layout.layout_sliders, parent);
            ViewHolder viewHolder = new ViewHolder(rowView, position);
            rowView.setTag(viewHolder);
        }

        final ViewHolder holder = (ViewHolder) rowView.getTag();

        holder.textViewProductIndex.setText(mProducts.get(position).getProductIndex());
        holder.textViewProductName.setText(mProducts.get(position).getProductName());
        holder.textViewQuantity.setText(mProducts.get(position).getQuantity());

        holder.imageViewADD.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                holder.textViewQuantity.setText("TESTING");
            }
        });

        return rowView;
    }
}
导入android.content.Context;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ArrayAdapter;
导入android.widget.ImageView;
导入android.widget.TextView;
公共类ProductAdapter扩展了ArrayAdapter{
私有上下文;
私有ArrayList MPProducts;
公共产品适配器(上下文、ArrayList产品){
超级(上下文,0,产品);
this.mContext=上下文;
this.mProducts=产品;
}
公共类视图持有者{
私有最终文本视图文本视图产品索引;
私有最终TextView textViewProductName;
私有最终文本视图文本视图数量;
私有最终图像视图图像视图添加;
私有最终ImageView imageViewFILL;
私人最终图像查看图像查看检查;
公共视图持有者(视图v,最终int位置){
this.mTextViewProductIndex=(TextView)v.findViewById(R.id.textViewIndex);
this.mTextViewProductName=(TextView)v.findViewById(R.id.textViewProductName);
this.mTextViewQuantity=(TextView)v.findViewById(R.id.textViewQuantity);
this.mImageViewADD=(ImageView)v.findviewbyd(R.id.buttonAdd);
this.mImageViewFILL=(ImageView)v.findViewById(R.id.buttonFill);
this.mimageview检查=(ImageView)v.findViewById(R.id.buttonCheck);
}
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
视图行视图=转换视图;
if(rowView==null){
LayoutInflater充气器=mContext.getLayoutInflater();
rowView=充气机。充气(R.layout.layout\u滑块,父级);
ViewHolder ViewHolder=新的ViewHolder(行视图,位置);
rowView.setT