带有搜索栏和textview的适配器

时间:2014-04-26 16:30:16

标签: java android

我有一个自定义适配器的列表视图,它使用一个搜索栏和一个文本视图完成。

@Override
    public View getView(final int position, View view, ViewGroup parent) {
        inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = inflater.inflate(R.layout.adapter, null);
        seekBar = (SeekBar)view.findViewById(R.id.seekBar);
        value = (TextView)view.findViewById(R.id.name);

        seekBar.setMax(200);

        value.setText(myArray[position]+" - "+value);
        seekBar.setProgress(value);
        seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                // TODO Auto-generated method stub
                seek = seekBar.getProgress();
                value.setText(myArray[position]+" - "+progress+" MB");
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                // TODO Auto-generated method stub

            }
        });

        return view;
    }

现在,问题在于,当我移动(例如)第二个搜索栏时,仅在最后一个文本视图中更改文本。为什么?我怎样才能解决这个问题?我希望如果我移动第二个搜索栏更改相对文本视图的文本而不是最后一个。

2 个答案:

答案 0 :(得分:0)

替换前两行
View v = super.getView(position, convertView, parent);

初始化适配器时

ArrayAdapter<String> languagesAdapter = new ArrayAdapter<String>(mContext, R.layout.adapter, arrayLanguages)

答案 1 :(得分:0)

从代码判断,value是一个成员变量,只要调用getView,它就会被getView覆盖。这就是为什么您的计划会更新另一个TextViewOnSeekBarChangeListener引用value

你应该使用这样的局部变量:

public View getView(final int position, View view, ViewGroup parent) {
        inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        TextView view = inflater.inflate(R.layout.adapter, null);
        SeekBar seekBar = (SeekBar)view.findViewById(R.id.seekBar);
        final TextViewvalue = (TextView)view.findViewById(R.id.name);

        //rest of your code