Android Java AppCompatTextView无法转换为LinearLayout

时间:2018-08-15 01:04:05

标签: java android gridview

尝试将多个文本视图添加到网格视图单元格时遇到问题。文本视图的数量是动态的,因此它取决于数据库中的数据。这是我为网格视图设置适配器的方式:

$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"
/>

任何想法为什么会这样?在此先感谢!

编辑

enter image description here

某些单元格仅需要一个文本视图。但是有些人可能会在几天后需要2到3个文本视图。

2 个答案:

答案 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