如何在启动时检查特定的复选框?

时间:2017-08-24 20:29:05

标签: java android listview checkbox

我正在使用Android Studio使用java创建应用程序,但我相当新,我的大多数经验都是使用C#和Winforms的Visual Studio。

目前我有一个带CheckBoxes的ListView,我使用ArrayAdapter来同步列表。

    ArrayList<String> items = new ArrayList<>();
    items.add("Alpha");
    items.add("Bravo");
    items.add("Charlie");
    items.add("Delta");

    ArrayAdapter<String> adapter = new ArrayAdapter<>(this, R.layout.row_layout, R.id.chkText, items);
    lv.setAdapter(adapter);

    // Test
    Toast.makeText(getApplicationContext(), "Count " + lv.getAdapter().getCount(), Toast.LENGTH_LONG).show();
    for (int j = 1; j < lv.getAdapter().getCount(); j++)
    {
        CheckBox cb = (CheckBox) lv.getAdapter().getItem(j);
        cb.setChecked(true);
    }

getCount()会返回正确的值但是当应用程序尝试检查框时应用程序崩溃。我在网上找到的所有答案对于这么简单的任务来说似乎过于复杂。有没有简单明了的方法可以查看盒子&#34; Bravo&#34;和&#34;达美&#34;当应用加载时,例如?

1 个答案:

答案 0 :(得分:1)

获得一个Checkbox的真正方法需要您深入了解ListView子项,而不是适配器本身。

android - listview get item view by position

基本上,适配器只存储数据和&#34;绑定&#34;数据到视图。适配器实际上并不保存视图信息。

  • lv.getAdapter()会返回一个通用的无类型Adapter<?>

  • 当您执行lv.getAdapter().getItem(j)时,会返回Object,因为您使用了String,所以ArrayAdapter<String>只能投放为extends ArrayAdapter<String>

解决此问题的更好方法是,如果您创建一个mChecked的自定义类,然后您可以编写自己的字段来存储名为private List<Boolean> mChecked = new ArrayList<>(); public void setChecked(int position, boolean checked) { mChecked.set(position, checked); // Might throw out of bounds exception! notifyDataSetChanged(); // Need to refresh the adapter } public boolean isChecked(int position) { return mChecked.get(position); } @Override public void getView( ... ) { ... View rowView = ... ; TextView tv = (TextView) rowView.findViewById(R.id.chkText); tv.setText(getItem(position)); Checkbox cb = (Checkbox) rowView.findViewById(R.id.checkbox); cb.setChecked(isChecked(position)); } 的布尔列表,例如,以及更新该列表的方法。

更详细地说,这是一个想法

getView()

该适配器类的checkBox.setChecked(isChecked(position));方法可以控制您何时通过import multiprocessing import cv2 import os path = r"/home/pi/Desktop/calibration.jpg" image = cv2.imread(path) def cvtcolor(img): print "converting to gray ..." gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) print "converted to gray" if True: p = multiprocessing.Process(name='test', target=cvtcolor, kwargs={'img':image} ) p.start() p2 = multiprocessing.Process(name='test', target=cvtcolor, kwargs={'img':image} ) p2.start()

检查了一个方框?

最后,您不会在应用加载时设置框,而是在初始化适配器时设置框。