Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 不确定如何在两列中动态添加复选框_Android_Checkbox_Multiple Columns - Fatal编程技术网

Android 不确定如何在两列中动态添加复选框

Android 不确定如何在两列中动态添加复选框,android,checkbox,multiple-columns,Android,Checkbox,Multiple Columns,我试图将数据库中的信息显示为复选框。现在它可以正常工作,但会在屏幕上放置一列复选框。我要做的是把它分成两部分 它现在做什么: 项目1 项目2 项目3 项目4 项目5 我想要什么: 项目1项目2 项目3项目4 项目5 最好是新的2列列表大小均匀,每个列表占屏幕的50%,即使指定的文本长度不同 我搜索了很多,尝试了3种不同的东西。没有找到任何有效的。下面是我的代码(创建一列) private void list students() { st=(线性布局)findViewById(R.id.

我试图将数据库中的信息显示为复选框。现在它可以正常工作,但会在屏幕上放置一列复选框。我要做的是把它分成两部分

它现在做什么:
项目1
项目2
项目3
项目4
项目5

我想要什么:
项目1项目2
项目3项目4
项目5

最好是新的2列列表大小均匀,每个列表占屏幕的50%,即使指定的文本长度不同

我搜索了很多,尝试了3种不同的东西。没有找到任何有效的。下面是我的代码(创建一列)

private void list students()
{    
st=(线性布局)findViewById(R.id.studTable);
ml=(RelativeLayout)findViewById(R.id.main);
ArrayList studentlst=新的ArrayList();
studentlst=db.getAllStudentsRowsAsArray();
final int sllen=studentlst.size();
最终字符串学生[][]=新字符串[sllen][3];
复选框cb[]=新复选框[sllen];
TextView pemail[]=新TextView[sllen];
int num=st.getChildCount();
如果(num!=0)st.removeAllViews();
字符串tsl=sllen+“”;
setText(tsl)号;
对于(int x=0;x

您可以在SDK ApiDemos(android SDK/samples/android-x/ApiDemos)中找到好的示例开始使用。

您应该使用一个而不是滚动视图。这样,您可以动态创建项目并拥有两列(或更多列)

老问题,但我发现自己在这里,所以我会继续回答。有几种方法,但我是这样做的

首先,获取数据并填充复选框的ArrayList:

ArrayList<CheckBox> checkboxes = new ArrayList<CheckBox>();
for (String s : dataArray) {
    CheckBox cBox = new CheckBox(myContext); //or inflate it from xml if you have a defined style
    cBox.setText(s);
    checkboxes.add(cBox);
}
最后,回到您创建复选框的ArrayList的地方,创建一个GridView(通过编程或通过扩展xml资源),然后附加BaseAdapter

GridView grid = new GridView(myContext);
grid.setNumColumns(2);
grid.setAdapter(new CheckboxGridAdapter());

您能展示一下您的xml布局吗?使用这么多数组有什么意义?添加了xml,但不知道为什么它会很重要。所有内容都是动态创建的。至于数组
student[]
是来自数据库的信息,按块注释中的描述分为各个部分。
cb[]
是已创建的复选框,
pemail[]
是不可见的文本视图,用于非相关目的。问题是,为什么要使用一个RelativeLayout(按ID查找)与其为listview中的每个元素创建一个新的数组,还不如说如果你开始使用listview,你应该去掉这些数组,listview提供了对其元素的轻松访问。复选框被添加到LinearLayout中,唯一添加到RL中的是不可见的持有者。我知道这不是一个优雅的解决方案,但正如我所说,我对Android开发非常陌生(这只是我的第二个应用程序,我以前从未使用过Java或XML).我只是希望找到一种简单的方法来制作两列复选框,而不是一列。我对Android开发相当陌生,不看你引用的信息,我甚至不能告诉你BaseAdapter是什么lol。我在胃里放了一些食物后,我会看看你引用的内容,如果我让它工作,我会把它标记为answer、 谢谢你可以用GoogleApi创建一个AVD,当你运行模拟器时,你可以找到ApiDemos应用程序,在那里你可以了解所有的例子都做了些什么。此外,你说如果我有很多条目,那么这条路线是最有效的。没有办法知道会有多少条条目。如果我不得不猜测的话,我会说平均大概是10-30条显然是任何数量的可能性,因为数据库是由用户创建的。老实说,查看您提供的链接没有帮助。我注意到那里的所有信息都是令人困惑的。在我搜索如何做某事时,我会像躲避瘟疫一样避开该网站,并寻找论坛答案lol。也许这只是因为我对Java/Android非常陌生。有没有可能给我举个代码示例?对我的应用程序可行还是通用?(如果对我的应用程序可行,请解释对我代码的更改/添加,因为我不喜欢让别人为我做事情,我想了解正在做什么。)我必须四处寻找gridview示例,我以前没有使用过。您可能会找到更多ListView示例。这是相同的行为。您必须使用适配器并为适配器提供项目列表/数组。getCount()应返回长度,getItem()应返回当前位置的项目,getView()应返回项目在绘制视图时调用。我发布的链接中也有一个示例。查看RelativeLayout,我认为使用ListView更容易
ArrayList<CheckBox> checkboxes = new ArrayList<CheckBox>();
for (String s : dataArray) {
    CheckBox cBox = new CheckBox(myContext); //or inflate it from xml if you have a defined style
    cBox.setText(s);
    checkboxes.add(cBox);
}
private class CheckboxGridAdapter extends BaseAdapter {
    @Override
    public int getCount() {
        return checkboxes.size();
    }

    @Override
    public Object getItem(int pos) {
        return checkboxes.get(pos);
    }

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

    @Override
    public View getView(int pos, View convertView, ViewGroup parent) {
        final ViewPlaceHolder holder;
        final CheckBox item = (CheckBox) getItem(pos);

        if (convertView == null) {
        holder = new ViewPlaceHolder();
        holder.cb = (CheckBox) item;
        convertView = holder.cb;

        convertView.setTag(holder);
        } else {
        holder = (ViewPlaceHolder) convertView.getTag();
        }

        return convertView;
    }
}

static class ViewPlaceHolder {
    CheckBox cb;
}
GridView grid = new GridView(myContext);
grid.setNumColumns(2);
grid.setAdapter(new CheckboxGridAdapter());