Java 无法选中多个复选框
我试图检查每个项目的复选框,但应用程序不断崩溃 这是我的新配料:Java 无法选中多个复选框,java,android,arraylist,Java,Android,Arraylist,我试图检查每个项目的复选框,但应用程序不断崩溃 这是我的新配料: public class NewIngredients extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate (savedInstanceState); setContentView (R.layout.activity_new_in
public class NewIngredients extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate (savedInstanceState);
setContentView (R.layout.activity_new_ingredients);
readCSV ();
}
public void readCSV(){
List<IngredientsHolder> data = new ArrayList<> ();
try {
String sCurrentline = null;
BufferedReader br = new BufferedReader(new FileReader ("/sdcard/TABLE_BF.csv"));
sCurrentline = br.readLine ();
while ((sCurrentline = br.readLine()) != null) {
String[] arr = sCurrentline.split(",");
IngredientsHolder ingredient = new IngredientsHolder(arr[0], arr[1], arr[2]);
data.add(ingredient);
}
br.close();
} catch (IOException e) {
e.printStackTrace();
}
Map<String, List<IngredientsHolder>> ingredientsByName = data.stream().collect(Collectors.groupingBy(IngredientsHolder::getName));
List<IngredientsHolder> main = new ArrayList<>();
List<IngredientsHolder> other = new ArrayList<>();
//Sort on `admin` in descending order
Comparator<IngredientsHolder> comparator = Comparator.comparing(IngredientsHolder:: getAdmin, (i1, i2) -> {
if (i2 > i1) {
return -1;
} else if (i2 < i1) {
return 1;
}
return 0;
});
//Go through each list (ingredient) and find the one with max `admin` value
//and add it to the `main` list then add the rest to `other`
ingredientsByName.forEach( (k, group) -> {
IngredientsHolder max = group.stream().max(comparator).get();
if (max.getAdmin() == 0) {
max = group.get(0);
}if(max.getAdmin () > 0){
//group.forEach(System.out::println);
int value = max.getAdmin ();
List<IngredientsHolder> filtered = (group.stream()
.filter(mc -> mc.getAdmin() == value)
.collect(Collectors.toList()));
//filtered.forEach(mc -> System.out.println (mc.toString ()));
}
main.add(max);
group.remove(max);
other.addAll(group);
System.out.println (other.size ());
});
List<IngredientsHolder> newMain = main.stream().distinct().collect(Collectors.toList());
ListView lv = (ListView) findViewById(R.id.list);
lv.setAdapter(new CustomAdapter(NewIngredients.this,newMain));
}
}
这是我的自定义_ni.xml文件:
<CheckBox
android:id="@+id/checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_marginEnd="7dp"
android:onClick="clickHandler"></CheckBox>
<TextView
android:id="@+id/textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_marginLeft="13dp"
android:layout_marginRight="10dp"
android:layout_marginTop="9dp"
android:layout_toLeftOf="@id/checkbox"
android:text="TEST"
android:textColor="#000"
android:textSize="18sp" />
</RelativeLayout>
我尝试了一些教程和一些建议,但我似乎无法实现任何正确的方法
我真正想做的是检查多个项目并将这些检查的项目存储到arraylist中,而这些项目也将这些未检查的项目存储到另一个arraylist中。clickHandler,源代码中缺少方法。clickHandler,方法在源代码中丢失。id为的复选框<代码>复选框有一个名为<代码>clickHandler的单击处理程序,但它没有在java类中实现
public void clickHandler(View view) {
}
要么移除
android:onClick="clickHandler"
或者将clickhandler
方法添加到java类中
public void clickHandler(View view) {
}
id为
Checkbox
的复选框有一个名为clickHandler
的单击处理程序,但它没有在java类中实现
public void clickHandler(View view) {
}
要么移除
android:onClick="clickHandler"
或者将clickhandler
方法添加到java类中
public void clickHandler(View view) {
}
您应该在man ArrayList中保留一个标志,以根据标志值设置选中和未选中复选框
因此,您不需要创建两个单独的列表。您应该在man ArrayList中保留一个标志,以便根据标志值设置选中和未选中复选框
因此,您无需创建两个单独的列表。发布来自crashI的stacktrace认为崩溃与复选框无关,因为适配器中没有复选框的引用发布来自crashI的stacktrace认为崩溃与复选框无关,因为适配器中没有复选框的引用