我还是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();
}
}
}
});
答案 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的监听器中。希望这有帮助!