2011-10-24 9 views
0

私はまだAndroidのプログラミングでは新しく、私がしようとしていることは、5x5の寸法のTableLayoutを作成したいと思っています。私はこれがInflateサービスを提起しているGridView BaseAdapterを使って行うことができることを知っています。しかし、これについては、私はテーブルレイアウトを使用して適用しようとします。以下はコードです。私はTableLayoutの新しいインスタンスとテーブル行の新しいインスタンスを作成します。各テーブル行で、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);を行うには間違いです。 2番目のステートメントを削除すると、必要なものであるxmlからテーブルがロードされます。

第2に、ここでは多くのことが起こっているため、自分で簡単にすることをお勧めします。 onClickリスナー内でこの作業をすべて行う代わりに、onCreateメソッド自体で行います。また、GridViewからContextを使用しているようですが、これは奇妙に見えます。おそらく、XMLレイアウトファイルを投稿した場合、それはあなたが何をしようとしているのかを説明するのに役立つでしょうか?

tView[i]は5個までのアイテムしか割り当てられませんが、配列には25個のアイテムが含まれているため、TextViewsの配列にはインデックスに問題があります。代わりに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 =新しいTableLayout(ctxt)を削除した後に動作しています。私のコードからは、この1行のコードが機能していないからです。次回は、オブジェクトをインスタンス化するときに注意します。私は昨日私の一日を過ごして何が間違っているのか理解します。あなたのアドバイスは本当に役立ちます。 – Zahary

+0

助けてくれてうれしいです。あなたの質問に答えたら、この回答を受け入れてください。 – Craigy

関連する問題