2011-10-24 161 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