SeekBars的ListView
ListView of SeekBars
我想知道如何制作一个包含 SeekBar 的 ArrayList 的 ListView
(我可以 'add' 更多 SeekBars 到列表中的按钮点击)
我是初学者,所以我已经尝试了几个小时。那是我能做的最好的,但我不知道我是否能用它做点什么:
ArrayList<SeekBar> seekbarlist=new ArrayList<SeekBar>();
ListView listseekbars = (ListView) findViewById(R.id.listprog);
final ArrayAdapter<SeekBar> seekbardapter = new
ArrayAdapter<SeekBar>
(this,android.R.layout.simple_list_item_1,android.R.id.text1,seekbarlist);
listseekbars.setAdapter(seekbardapter);
我很乐意得到一些帮助:)
提前谢谢你。
您可能不想显示 SeekBar 列表。您想要显示值列表 AS SeekBars。
您需要制作自定义适配器和自定义列表项布局。
自定义列表项只是一个搜索栏:
seekbar_list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<SeekBar xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/seekBar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:max="100">
</SeekBar>
自定义适配器:
private class SeekBarAdapter extends ArrayAdapter<Integer>{
List<Integer> data;
int resource;
SeekBarAdapter(Context context, int layoutResource, List<Integer> data){
super(context, layoutResource, data);
this.data = data;
this.resource = layoutResource;
}
@NonNull
@Override
public View getView(int position, View convertView, @NonNull ViewGroup parent) {
Integer value = data.get(position);
if (convertView == null){
convertView = LayoutInflater.from(getContext()).inflate(resource, parent);
}
SeekBar sb = convertView.findViewById(R.id.seekBar);
sb.setProgress(value);
sb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean wasInitiatedByUser) {
// do what you want with the edited values here.
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
return convertView;
}
}
然后实施:
ArrayList<Integer> yourvalues = new ArrayList<>();
ListView listseekbars = (ListView) findViewById(R.id.listprog);
SeekBarAdapter seekBarAdapter = new SeekBarAdapter(this, R.layout.seekbar_list_item, yourvalues);
listseekbars.setAdapter(seekBarAdapter);
我认为你需要做的是使用 RecyclerView
而不是 ListView
不同之处在于你可以为每个项目制作一个布局文件,然后将这些项目添加到RecyclerView
.
我想知道如何制作一个包含 SeekBar 的 ArrayList 的 ListView (我可以 'add' 更多 SeekBars 到列表中的按钮点击) 我是初学者,所以我已经尝试了几个小时。那是我能做的最好的,但我不知道我是否能用它做点什么:
ArrayList<SeekBar> seekbarlist=new ArrayList<SeekBar>();
ListView listseekbars = (ListView) findViewById(R.id.listprog);
final ArrayAdapter<SeekBar> seekbardapter = new
ArrayAdapter<SeekBar>
(this,android.R.layout.simple_list_item_1,android.R.id.text1,seekbarlist);
listseekbars.setAdapter(seekbardapter);
我很乐意得到一些帮助:) 提前谢谢你。
您可能不想显示 SeekBar 列表。您想要显示值列表 AS SeekBars。
您需要制作自定义适配器和自定义列表项布局。
自定义列表项只是一个搜索栏:
seekbar_list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<SeekBar xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/seekBar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:max="100">
</SeekBar>
自定义适配器:
private class SeekBarAdapter extends ArrayAdapter<Integer>{
List<Integer> data;
int resource;
SeekBarAdapter(Context context, int layoutResource, List<Integer> data){
super(context, layoutResource, data);
this.data = data;
this.resource = layoutResource;
}
@NonNull
@Override
public View getView(int position, View convertView, @NonNull ViewGroup parent) {
Integer value = data.get(position);
if (convertView == null){
convertView = LayoutInflater.from(getContext()).inflate(resource, parent);
}
SeekBar sb = convertView.findViewById(R.id.seekBar);
sb.setProgress(value);
sb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean wasInitiatedByUser) {
// do what you want with the edited values here.
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
return convertView;
}
}
然后实施:
ArrayList<Integer> yourvalues = new ArrayList<>();
ListView listseekbars = (ListView) findViewById(R.id.listprog);
SeekBarAdapter seekBarAdapter = new SeekBarAdapter(this, R.layout.seekbar_list_item, yourvalues);
listseekbars.setAdapter(seekBarAdapter);
我认为你需要做的是使用 RecyclerView
而不是 ListView
不同之处在于你可以为每个项目制作一个布局文件,然后将这些项目添加到RecyclerView
.