具有5x5维度的Android表格布局

时间:2011-10-24 02:20:37

标签: android eclipse android-layout android-widget

我还是Android编程的新手,我正在尝试做的是,我想创建5x5维度的TableLayout。我知道这可以通过使用GridView BaseAdapter起诉Inflate服务来完成。但对于这个我尝试使用表格布局。下面是代码。我创建了TableLayout的新实例,以及Table行的新实例。在每个表行上,我创建了5个TextView的实例。但是一旦我在模拟器或手机中打开,就没有创建TableRow,它只是空白的表格布局。也没有抛出异常。

GridView navIcon =(GridView)findViewById(R.id.content);         navIcon.setAdapter(new ImageAdapter(this));

    navIcon.setOnItemClickListener(new OnItemClickListener(){

        @Override
        public void onItemClick(AdapterView<?> parent, View v, int position,long id) {
            // TODO Auto-generated method stub              

            if (position==0){   

                try{
                    TableLayout calgrid = (TableLayout) findViewById(R.id.gridtable);                       
                    Context ctxt = v.getContext();
                    TextView[] tView = new TextView[25];    
                    calgrid = new TableLayout(ctxt);
                    int dip = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,(float) 1, getResources().getDisplayMetrics());
                    int counter=1;
                    TableRow[] tr = new TableRow[5];
                    for(int j=0;j<5;j++){
                        tr[j] = new TableRow(ctxt);
                        for(int i=0;i<5;i++){                               
                            tView[i] = new TextView(ctxt);

                            tView[i].setText(String.valueOf(counter));      
                            tView[i].setTextSize(15);
                            counter+=1;
                            tView[i].setWidth(50 * dip);
                            tView[i].setPadding(20*dip, 0, 0, 0);
                            tView[i].setTextColor(Color.rgb( 100, 200, 200));                               
                            Toast.makeText(getApplicationContext(), "tView["+i+"] value " + String.valueOf(tView[i].getText()), Toast.LENGTH_SHORT).show();                     

                            tr[j].addView(tView[i], 50, 50);                            
                        }
                        calgrid.addView(tr[j]);                         
                    }                                           
                }catch(Exception e){
                    Log.e("MainActivity", "Error in activity", e);  
                    Toast.makeText(getApplicationContext(),e.getClass().getName() + " " + e.getMessage(),Toast.LENGTH_LONG).show();
                }                                           
            }
        }

    });

1 个答案:

答案 0 :(得分:1)

首先,执行calgrid = (TableLayout) findViewById(R.id.gridtable);然后calgrid = new TableLayout(ctxt);是错误的,基本上说现在找到此视图会将此变量分配给完全不同的变量。删除第二个语句,它将从xml加载表,这是你想要的。

其次,我认为为自己简化一些事情是个好主意,因为这里有很多事情要做。而不是在onClick侦听器中完成所有这些工作,而是在onCreate方法本身中执行此操作。此外,您似乎正在使用GridView中的Context,这看起来很奇怪。也许如果您发布了xml布局文件,它可以帮助解释您尝试做什么?

TextViews数组中的索引也存在问题,因为tView[i]只会分配最多5个项目,但该数组包含25个项目。请尝试使用tView[(j*5)+i]。我不认为这会导致您的问题,但只是确保您正确分配商品。

这是一个如何按照你想要的方式做某事的例子

    setContentView(R.layout.grid);

    TableLayout tl = (TableLayout) findViewById(R.id.gridtable);
    for (int j = 0; j < 5; j++) {
        TableRow tr = new TableRow(this);
        tr.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
                LayoutParams.WRAP_CONTENT));
        for (int i = 0; i < 5; i++) {
            TextView tView = new TextView(this);

            tView.setText("TEXT" + String.valueOf((j * 5) + i + 1));
            tView.setLayoutParams(new LayoutParams(
                    LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));

            tr.addView(tView);
        }
        tl.addView(tr, new TableLayout.LayoutParams(
                LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
    }

grid.xml

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/gridtable"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
</TableLayout>

一旦你在活动中使用它,你可以尝试将它放在一个连接到GridView的监听器中。希望这有帮助!