尝试将多个文本视图添加到网格视图单元格时遇到问题。文本视图的数量是动态的,因此它取决于数据库中的数据。这是我为网格视图设置适配器的方式:
$JS = <<< JS
$(".dynamicform_wrapper").on("change","select",function(){
var id=$(this).attr("id");
var optionsInput=id.match(/^([a-zA-Z]+)\-([0-9]+)/g)[0]+'-add-options';
if ($(this).val()== 3) {
$('#'+optionsInput).hide();
}else {
$('#'+optionsInput).show();
}
});
JS;
$this->registerJs($JS, yii\web\View::POS_READY);
我的.xml文件用于网格视图:
adapter = new ArrayAdapter<String>(this.getContext(), android.R.layout.simple_list_item_1, items) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LinearLayout ll = (LinearLayout) super.getView(position, convertView, parent);
// for simplicity I hardcoded two text views
TextView cell = new TextView(this.getContext());
cell.setText("Test");
TextView cell2 = new TextView(this.getContext());
cell2.setText("HI");
ll.addView(cell);
ll.addView(cell2);
return ll;
}
};
gridView.setAdapter(adapter);
但是,我收到以下错误消息:
<GridView
android:id="@+id/gridView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="7"
android:requiresFadingEdge="vertical"
android:scrollbars="none"
/>
任何想法为什么会这样?在此先感谢!
编辑
某些单元格仅需要一个文本视图。但是有些人可能会在几天后需要2到3个文本视图。
答案 0 :(得分:0)
您可以检查simple_list_item_1.xml
并查看其根是否为TextView
。如果是,它将根据您的示例抛出ClassCastException
。
答案 1 :(得分:0)
创建一个xml布局(例如cell_layout.xml),并将其设置为您希望像元一样的方式。使用LinearLayout并在其中放置两个TextViews。给出两个TextViews ID(例如TextView1,TextView2)。创建ArrayAdapter时,请使用:new ArrayAdapter <>(此为R.layout.cell_layout)。
//Add text for each cell to a string array
String[] cell0 = new String[] {"Test", "Hi"};
//Add all cells to an another string array
String[][] cells = new String[][] {cell0};
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View cellView = convertView;
if(cellView != null) {
LayoutInflater layoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
cellView = layoutInflater.inflate(R.layout.scores, parent);
}
cellView.findViewById(R.id.textView1).setText(cells[position][0]);
cellView.findViewById(R.id.textView2).setText(cells[position][1]);
return cellView;
}
//This is a shortcut. Normally you would create a custom ArrayAdapter and a custom class