我正在尝试将数据库中的信息显示为复选框。现在它工作正常,但在屏幕上放置一列复选框。我想要做的就是把它分成2个。
现在做什么:
物品1
ITEM2
项目3
ITEM4
ITEM5
我想要的:
item1 item2
item3项目4
ITEM5
优选地,新的2列列表将是均匀大小的,每个列表获得50%的屏幕,即使分配的文本是不同的长度。
我经常搜索,尝试过3种不同的东西。但是没有发现任何可行的东西。下面是我的代码(创建一列)。
private void listStudents()
{
st = (LinearLayout)findViewById(R.id.studTable);
ml = (RelativeLayout)findViewById(R.id.main);
ArrayList<ArrayList<String>> studentlst = new ArrayList<ArrayList<String>>();
studentlst = db.getAllStudentsRowsAsArrays();
final int sllen = studentlst.size();
final String student[][] = new String[sllen][3];
CheckBox cb[] = new CheckBox[sllen];
TextView pemail[] = new TextView[sllen];
int num = st.getChildCount();
if(num != 0) st.removeAllViews();
String tsl = sllen + "";
nos.setText(tsl);
for(int x=0; x < sllen; x++)
{
/************************
* student[x][case] *
* case options *
* 0 = id *
* 1 = name *
* 2 = email *
************************/
String curstudent = studentlst.get(x).toString();
student[x][0] = curstudent.substring(1,curstudent.indexOf(","));
student[x][1] = curstudent.substring(curstudent.indexOf(" ")+1,curstudent.lastIndexOf(","));
student[x][2] = curstudent.substring(curstudent.lastIndexOf(" ")+1, curstudent.length() - 1);
}
Arrays.sort(student, new Comparator<String[]>() {
@Override
public int compare(String[] entry1, String[] entry2) {
String name1 = entry1[1];
String name2 = entry2[1];
return name1.compareTo(name2);
}
});
for(int x=0;x<sllen;x++)
{
cb[x] = new CheckBox(this);
cb[x].setId(x+100);
cb[x].setText(student[x][1]);
pemail[x] = new TextView(this);
pemail[x].setText(student[x][2]);
pemail[x].setId(x+1000);
pemail[x].setVisibility(View.INVISIBLE);
st.addView(cb[x],x);
ml.addView(pemail[x],x);
}
}
XML文件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/lblmainselclass"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="82dp"
android:layout_marginTop="7dp"
android:text="@string/lblmainselectclass" />
<Spinner
android:id="@+id/mainclassspinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/lblmainselclass" />
<ScrollView
android:id="@+id/scrollView1"
android:layout_width="wrap_content"
android:layout_height="250dp"
android:layout_below="@+id/lblmainselstudents"
android:layout_centerHorizontal="true" >
<LinearLayout
android:id="@+id/studTable"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >
</LinearLayout>
</ScrollView>
<TextView
android:id="@+id/lblmainselstudents"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/mainclassspinner"
android:layout_centerHorizontal="true"
android:layout_marginTop="5dp"
android:text="@string/lblselectstud" />
<Button
android:id="@+id/btnsend"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:text="@string/btnlblsend" />
<Spinner
android:id="@+id/mainresponsespinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/btnsend"
android:layout_centerHorizontal="true"
android:layout_marginBottom="30dp" />
<TextView
android:id="@+id/mainnumofstudents"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:text="@string/invis"
android:visibility="invisible" />
<TextView
android:id="@+id/classselected"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:text="@string/invis"
android:visibility="invisible" />
<TextView
android:id="@+id/responseselected"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:text="@string/invis"
android:visibility="invisible" />
<TextView
android:id="@+id/numchecked"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:text="@string/invis"
android:visibility="invisible" />
答案 0 :(得分:1)
老问题,但我发现自己在这里,所以我会继续回答它。有几种方法,但这就是我做的方式。
首先,获取数据并填充Checkbox的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);
}
然后创建一个扩展BaseAdapter的类以及一个支持静态类。假设CheckBox ArrayList是一个实例变量,我们将数据绑定到适配器。如果没有,您可以通过这种方式在BaseAdapter类访问复选框中创建构造函数。
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;
}
最后,回到创建Checkbox的ArrayList的位置,创建一个GridView(以编程方式或通过膨胀xml资源),然后附加BaseAdapter。不要忘记设置列数,这毕竟是这篇文章的重点。
GridView grid = new GridView(myContext);
grid.setNumColumns(2);
grid.setAdapter(new CheckboxGridAdapter());
答案 1 :(得分:0)
如果您有许多条目,则应使用自定义ListView和BaseAdapter来提高效率。
你可以在SDK ApiDemos(android-sdk / samples / android-x / ApiDemos)中找到很好的例子。
答案 2 :(得分:0)
您应该使用GridView而不是ScrollView。这样您就可以动态创建项目并拥有两个(或更多列)