android - 更改搜索栏上的 ListView 项目值更改

标签 android listview seekbar

如何在 Seekbar 进度更改时更改 ListView 项目值。

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">


    <SeekBar
        android:id="@+id/seekValue"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_margin="20dp"
        android:max="100" />

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_margin="10dp">


        <ListView
            android:id="@+id/listSelector"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"></ListView>


    </LinearLayout>

</LinearLayout>

和 ListView 项目是:

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">


    <RelativeLayout
        android:id="@+id/layoutSelector"
        android:layout_width="fill_parent"
        android:layout_height="50dp"
        android:background="@android:color/darker_gray">


        <TextView
            android:id="@+id/txtItemName"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_toLeftOf="@+id/txtValueChanges"
            android:padding="5dp"
            android:text="Item Name"
            android:textAppearance="?android:textAppearanceLarge"
            android:textStyle="bold" />


        <TextView
            android:id="@+id/txtValueChanges"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:padding="5dp"
            android:visibility="gone"
            android:text="0"
            android:textAppearance="?android:textAppearanceMedium"
            android:textStyle="bold" />


    </RelativeLayout>


</LinearLayout>

现在这是我的 mailActivity 类:

    public class ListActivitys extends Activity {

    ArrayList listItemName;
    public static ListView listSelector;
    SeekBar seekValue;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list);
        listItemName = new ArrayList();



        for (int i = 0; i < 50; i++) {
            listItemName.add("Item : " + (i + 1));
        }

        seekValue = (SeekBar) findViewById(R.id.seekValue);
        listSelector = (ListView) findViewById(R.id.listSelector);
        listSelector.setAdapter(new AdapterList(ListActivitys.this, listItemName,seekValue));


    }


}

最后我的自定义适配器是:

    public class AdapterList extends BaseAdapter {

    Context mcContext;
    ArrayList listItems, TempListItems;
    int selectedPos = 0;
    SeekBar seekValue;


    public AdapterList(Context listActivitys, ArrayList listItemName, SeekBar seek) {
        listItems = listItemName;
        mcContext = listActivitys;
        seekValue = seek;


        createATemList(listItemName.size());
    }

    private void createATemList(int size) {
        TempListItems = new ArrayList();

        for (int i=0; i<size; i++){
            TempListItems.add("0");
        }
    }

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

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

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

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;
        LayoutInflater mInflater = (LayoutInflater) mcContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.adapter_list_item, null);
            holder = new ViewHolder();
            holder.txtItemName = (TextView) convertView.findViewById(R.id.txtItemName);
            holder.txtValueChanges = (TextView) convertView.findViewById(R.id.txtValueChanges);
            holder.layoutSelector = (RelativeLayout) convertView.findViewById(R.id.layoutSelector);
            convertView.setTag(holder);

        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        if (selectedPos == position) {
            holder.layoutSelector.setBackgroundColor(mcContext.getResources().getColor(R.color.colorAccent));
        } else {
            holder.layoutSelector.setBackgroundColor(mcContext.getResources().getColor(R.color.transparent));
        }

        if (!TempListItems.get(selectedPos).equals("0")){
            holder.txtValueChanges.setVisibility(View.VISIBLE);
        }else{
            holder.txtValueChanges.setVisibility(View.GONE);
        }

        holder.txtItemName.setText(listItems.get(position).toString());
        holder.layoutSelector.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                selectedPos = position;
                notifyDataSetChanged();
            }
        });


        seekValue.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {

                /*View view = (View) seekBar.getParent();
                if(view != null){
                    TextView tvProgress = (TextView)view.findViewById(R.id.txtValueChanges);
                    tvProgress.setVisibility(View.VISIBLE);
                    tvProgress.setText(progress + "%");
                }*/

                updateView(selectedPos, progress);
            }


            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });
        return convertView;
    }


    private void updateView(int selectedPos, int progress) {
        View v = ListActivitys.listSelector.getChildAt(selectedPos -
                ListActivitys.listSelector.getFirstVisiblePosition());

        if (v == null)
            return;


        TextView txtValueChanges = (TextView) v.findViewById(R.id.txtValueChanges);
        TempListItems.set(selectedPos,progress+"");
        if (!TempListItems.get(selectedPos).equals("0")){
            System.out.println("=== Progress : " + progress);
            txtValueChanges.setText(TempListItems.get(selectedPos)+"");
            notifyDataSetChanged();
        }
    }



    private class ViewHolder {
        TextView txtValueChanges;
        TextView txtItemName;
        RelativeLayout layoutSelector;
    }
}

当Seekbar值改变时是否可以改变ListView项目的值。如果是那么怎么办?请帮助我。

谢谢。

最佳答案

在你的Activity

seekValue.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
    @Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
        // change the adapter datasource
        listItemName.get(adapter.selectedPos) = "value you want to change";  

        // notify update
        adapter.notifyItemChanged(adapter.selectedPos);
    }
}

关于android - 更改搜索栏上的 ListView 项目值更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41158528/

相关文章:

android - Jetpack Compose 与 Coroutine 的 StateFlow

java - 排序 ListView Java

java - 如何在android中的视频 View 上显示音量搜索栏?

android - Haskell Android OpenGL

android - 获取/删除 OnHierarchyChangeListener?

android - android 中使用 Zxing 库生成二维码版本 2 和二维码版本 4 的区别

android - 带有滑动 TabLayout 的 ViewPager 中的 Listview - 高度问题

android从url加载图片

java - 如何设置搜索栏的最小值和最大值

带有自定义缩略图的 Android 搜索栏