Android Table Layout с размером 5x5 - PullRequest
       1

Android Table Layout с размером 5x5

0 голосов
/ 24 октября 2011

Я все еще новичок в программировании Android, я пытаюсь создать TableLayout размером 5x5. Я знаю, что это можно сделать с помощью GridView BaseAdapter, который подает заявку на сервис Inflate. Но для этого я пытаюсь применить, используя макет таблицы. Ниже приведен код. Я создаю новый экземпляр TableLayout и новый экземпляр строки таблицы. В каждой строке таблицы я создал экземпляр 5 TextView. Но как только я открываю в эмуляторе или в моем телефоне, TableRow не создается, он просто пустой пустой Table Layout. Также не исключение было брошено.

GridView navIcon = (GridView) findViewById (R.id.content); navIcon.setAdapter (новый ImageAdapter (это));

    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 Ответ

1 голос
/ 24 октября 2011

Прежде всего, было бы ошибкой делать calgrid = (TableLayout) findViewById(R.id.gridtable);, а затем calgrid = new TableLayout(ctxt);, что в основном говорит, что найди это представление, теперь присваивай эту переменную чему-то совершенно другому.Удалите второе утверждение, и оно загрузит таблицу из xml, что вам и нужно.

Во-вторых, я думаю, что было бы неплохо упростить вещи для себя, потому что здесь многое происходит.Вместо того, чтобы делать всю эту работу внутри onClick слушателя, делайте это в самом методе onCreate.Кроме того, вы, кажется, используете контекст из GridView, который кажется странным.Возможно, если вы разместили свой файл макета 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.Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...