2011-10-24 159 views
0

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

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

首先,这是一个错误做calgrid = (TableLayout) findViewById(R.id.gridtable);,然后calgrid = new TableLayout(ctxt);,基本上说,发现这种观点现在这个变量分配到完全不同的东西。删除第二条语句,它将从xml加载表,这是你想要的。第二,我认为这是一个好主意,为自己简化事情,因为这里有很多事情要做。而不是在onClick监听器中完成所有这些工作,请在onCreate方法本身中执行此操作。另外,你似乎在使用GridView中的Context,这看起来很奇怪。也许如果你发布了你的xml布局文件,它可能有助于解释你正在尝试做什么?

TextView数组中的索引也存在问题,因为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的侦听器中。希望这可以帮助!

+0

谢谢我保持我现有的代码,它工作后,我删除了calgrid = new TableLayout(ctxt);从我的代码中,仅仅因为这一行代码不起作用。下次我在实例化一个对象时会小心。我昨天花了整整一天的时间来弄清楚什么是错的。你的建议真的很有用。 – Zahary

+0

很高兴帮助。如果它回答你的问题,请接受这个答案。 – Craigy