我有一个列表视图,每行都有一个复选框,当我选择任何复选框然后滚动屏幕时,每个项目的复选框都会发生变化,我的意思是取消选中它的检查,有时它会保持取消选中,然后当我再次向上滚动时,选中的一个变为取消选中,我发现这个问题Android listview带有复选框问题,用户说这有助于他们,但我无法理解我做了什么sholud,请帮助
这是我的适配器
class RestaurantAdapter extends BaseAdapter {
private static LayoutInflater inflater = null;
private ArrayList<HashMap<String, String>> data;
Activity activity;
public RestaurantAdapter(Activity activity,
ArrayList<HashMap<String, String>> data) {
// TODO Auto-generated constructor stub
this.activity = activity;
this.data = data;
inflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return data.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public long getItemId(int position) {
// …Run Code Online (Sandbox Code Playgroud) 我已经从SO阅读了大约30页以及有关在列表中跟踪检查状态的教程,但是在可扩展ListView中这样做很少有信息(尤其是工作信息).
我让孩子们填充了复选框,但当我检查一组孩子的盒子时,其他组中的随机孩子也会检查.我需要阻止这一点.我认为我读到的最好的信息是将复选框设置为单独的标签,但我不知道如何设置多个标签,当我尝试时,我遇到了类错配错误,将复选框与转换视图进行比较.
有没有人遇到过在expandablelistview的孩子中跟踪复选框状态的好方法?
我做了多处更改,所以我要输入整个适配器代码.请检查几行getGroupView和整个getChildView,并帮我看看我做错了什么.
编辑:现在发生的事情是,当我选中一个框然后展开另一个组时,所有选中的框都取消选中:
public class MyExpandableListAdapter extends BaseExpandableListAdapter
implements OnCheckedChangeListener {
private Context mContext;
private ArrayList<ContactNameItems> mListDataHeader;
private HashMap<String, List<ContactPhoneItems>> mListDataChild;
private boolean[] mGetChecked;
private HashMap<String, boolean[]> mChildCheckStates;
private ArrayList<String> selectedNumbers;
private ChildViewHolder childViewHolder;
private GroupViewHolder groupViewHolder;
private String numberText;
public MyExpandableListAdapter(Context context,
ArrayList<ContactNameItems> listDataHeader,
HashMap<String, List<ContactPhoneItems>> listDataChild,
ArrayList<String> listOfNumbers) {
mContext = context;
mListDataHeader = listDataHeader;
mListDataChild = listDataChild;
selectedNumbers = listOfNumbers;
mChildCheckStates = new HashMap<String, boolean[]>();
}
@Override
public int getGroupCount() {
return mListDataHeader.size();
}
@Override …Run Code Online (Sandbox Code Playgroud) 我隐藏了我的盒子有问题CheckBox.我现在CheckBox看起来像这样:
<CheckBox
android:id="@+id/favoritesBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:button="@null"
android:tag="1"
android:textStyle="italic"
android:text="@string/details_tags_favs" />
Run Code Online (Sandbox Code Playgroud)
这里唯一的问题是,它button=@null正在消除它的风格,并没有完全消失.因此,我text没有居中,而是向右移动(按箱子大小).
在API 16和更低版本中是否有一种平滑的方法可以完全摆脱它?
基本上我想要的是一个带有图标和图标下方文本的复选框,如下所示:
-------------------
| CheckBox Icon |
| |
| CheckBox Text |
| |
-------------------
Run Code Online (Sandbox Code Playgroud)
默认情况下,图标位于左侧,文本位于右侧,两者位于同一级别.在我正在使用的布局下面:
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Switch state"
android:button="@drawable/my_custom_selector" />
Run Code Online (Sandbox Code Playgroud)
有关如何实现将图标放在顶部以及图标下方的文本的任何想法?提前致谢 :)
我正在尝试使用按钮和对话框复选框进行Android多选项目,并在列表视图中显示所选项目(如图片中所示)而不是按钮(当前显示在按钮中:请参考图片)
我能够在下面的按钮中显示接收器,但我想在列表视图中显示相同的内容:
当前从对话框中选择后显示复选框,如:
"Receiver1, Receiver2"
Run Code Online (Sandbox Code Playgroud)
我想要:
image of Receiver1 with Receiver1 Name
image of Receiver2 with Receiver2 Name
Run Code Online (Sandbox Code Playgroud)
SendServiceActivity.java
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.text.Layout;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.widget.ImageView;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
public class SendServiceActivity extends AppCompatActivity implements View.OnClickListener{
protected Button …Run Code Online (Sandbox Code Playgroud) android android-intent android-listview android-checkbox android-studio
我在我的ListView行的xml布局中有以下内容:
<CheckBox
android:id="@+id/favbutton"
style="?android:attr/starStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true" />
Run Code Online (Sandbox Code Playgroud)
它显示了一个蓝色的星星,可以检查以选择一个喜欢的.这正是我需要的功能,但我只想自定义显示的星形图标.我想将颜色改为黄色而不是蓝色,如果可能的话也会使星形变小.是否可以通过更改应用于应用程序的主题来进行这些更改?我需要编辑什么才能更改星形图标的外观?
我的操作栏中有问题.我正在尝试在ActionBar中的菜单项上添加一个复选框,但它不起作用.它只显示复选框的标题.
这是我的menu.xml:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.tracking.bus.maps.SingleViewMapsActivity" >
<item
android:id="@+id/actionbar_alarm"
android:title="@string/actionbar_alarm"
app:actionViewClass="android.widget.checkbox"
app:showAsAction="ifRoom"/>
</menu>
Run Code Online (Sandbox Code Playgroud) 如何设置菜单中复选框项目部分的初始值?当我启动一个Activity时,我想设置一个保存在共享首选项中的布尔值.
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".LoginActivity">
<item
android:id="@+id/checkbox"
android:title="@string/checkbox"
android:orderInCategory="10"
android:showAsAction="never"
android:visible="true"
android:checkable="true"
android:checked="true"/>
</menu>
Run Code Online (Sandbox Code Playgroud)
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.login, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.checkbox){
if(item.isChecked()){
item.setChecked(false);
}else{
item.setChecked(true);
}
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean(PrefsConsts.CHECKBOX,item.isChecked());
editor.commit();
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
我总能知道什么是价值,但我不知道如何设置新的价值.
我使用以下代码创建了动态复选框:
XML:
<LinearLayout
android:id="@+id/layout_checkbox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
的.java:
LinearLayout ll = (LinearLayout) findViewById(R.id.layout_checkbox);
ll.removeAllViews();
for (int i = 0; i < 10; i++) {
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
AppCompatCheckBox myCheckBox = new AppCompatCheckBox(getApplicationContext());
myCheckBox.setText(i);
myCheckBox.setTextColor(Color.parseColor("#FFFFFF"));
myCheckBox.setHintTextColor(Color.parseColor("#FFFFFF"));
myCheckBox.setTextSize(12);
myCheckBox.setId(i);
ll.addView(myCheckBox, lp);
}
Run Code Online (Sandbox Code Playgroud)
现在从上面的代码只有LOLLIPOP版本显示带有文本的复选框.对于以下LOLLIPOP版本,它仅显示Text但不显示复选框.
如果我将以下代码放在xml文件中,同样适用于所有设备:
<android.support.v7.widget.AppCompatCheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Testing"
android:buttonTint="@color/colorAccent"/>
Run Code Online (Sandbox Code Playgroud)
但我不能在xml中定义复选框,因为我必须动态创建它.
即使setButtonTintList不在下面工作LOLLIPOP
如何在下面的LOLLIPOP版本中显示Checkbox AppCompatCheckBox?
我有一个用户可以检查的专业列表。当用户对他们的选择感到满意后,我将收集所选复选框的信息并将这些专业保存在用户的个人资料中。
但是,当我点击任何复选框时,视图模型中的状态会发生变化,但复选框仍处于未选中状态。
专业列表
@Composable
fun SpecialtyList(
viewModel: SpecialtyListViewModel = hiltViewModel(),
navController: NavController
) {
LazyColumn(modifier = Modifier.fillMaxSize()) {
item {
viewModel.specialtyList.value.forEach { specialty ->
Row(
modifier = Modifier
.fillMaxWidth()
.padding(10.dp),
verticalAlignment = Alignment.CenterVertically
) {
Checkbox(
checked = specialty.isSelected,
onCheckedChange = {
specialty.isSelected = it
},
colors = CheckboxDefaults.colors(MaterialTheme.colors.primary)
)
Text(
text = specialty.name,
modifier = Modifier
.padding(horizontal = 10.dp)
)
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
专业视图模型
@HiltViewModel
class SpecialtyListViewModel @Inject constructor() : ViewModel() {
// HARD-CODED PROPERTIES
val specialtyList …Run Code Online (Sandbox Code Playgroud)