Canaan Nyoni
Canaan Nyoni

Reputation: 13

How to add rows and columns in GridView using a button event in Android?

I have created a GridView with three rows and three columns, each with text fields in them. Upon clicking a button, the user may require either rows or columns to be created so that they can create an extra tier to the "table". How is this implemented?

Upvotes: 1

Views: 2853

Answers (1)

Aleksandr
Aleksandr

Reputation: 4936

One does not simply create table with rows and columns without data.


You can only use method setNumColumns to defines how many columns to show:

public void setNumColumns (int numColumns)

Added in API level 1
Set the number of columns in the grid

Related XML Attributes
android:numColumns
Parameters
numColumns - The desired number of columns.

link: http://developer.android.com/reference/android/widget/GridView.html#setNumColumns(int)

This means, that you can only set columns number but not rows number.
If you need GridView 3x3, then you need 9 items for your GridView and set number of colums to 3.
If you need GridView 7x2 you need 14 items for your GridView and set number of colums to 7.

I have wrote some example, to help you implement what you need.


MainActivity.java:

package com.dinamicgridview.app;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.GridView;


public class MainActivity extends AppCompatActivity {

    String[] data = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"};

    GridView mGridView;
    ArrayAdapter<String> mAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mAdapter = new ArrayAdapter<String>(this, R.layout.gridview_item, R.id.tv_text, data);
        mGridView = (GridView) findViewById(R.id.container);
        mGridView.setAdapter(mAdapter);
        adjustGridView(4);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_adjust_1) {
            adjustGridView(1);
            return true;
        }else if(id == R.id.action_adjust_2){
            adjustGridView(2);
            return true;
        }else if(id == R.id.action_adjust_3){
            adjustGridView(3);
            return true;
        }else if(id == R.id.action_adjust_4){
            adjustGridView(4);
            return true;
        }else if(id == R.id.action_adjust_5){
            adjustGridView(5);
            return true;
        }else if(id == R.id.action_adjust_6){
            adjustGridView(6);
            return true;
        }else if(id == R.id.action_adjust_7){
            adjustGridView(7);
            return true;
        }else if(id == R.id.action_adjust_8){
            adjustGridView(8);
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    private void adjustGridView(int numColumns) {
        mGridView.setNumColumns(numColumns);
    }
}

menu_main.xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto"
      xmlns:tools="http://schemas.android.com/tools"
      tools:context=".MainActivity">
    <item android:id="@+id/action_adjust_1"
          android:title="Adjust 1"
          android:orderInCategory="100"
          app:showAsAction="never"/>
    <item android:id="@+id/action_adjust_2"
          android:title="Adjust 2"
          android:orderInCategory="100"
          app:showAsAction="never"/>
    <item android:id="@+id/action_adjust_3"
          android:title="Adjust 3"
          android:orderInCategory="100"
          app:showAsAction="never"/>
    <item android:id="@+id/action_adjust_4"
          android:title="Adjust 4"
          android:orderInCategory="100"
          app:showAsAction="never"/>
    <item android:id="@+id/action_adjust_5"
          android:title="Adjust 5"
          android:orderInCategory="100"
          app:showAsAction="never"/>
    <item android:id="@+id/action_adjust_6"
          android:title="Adjust 6"
          android:orderInCategory="100"
          app:showAsAction="never"/>
    <item android:id="@+id/action_adjust_7"
          android:title="Adjust 7"
          android:orderInCategory="100"
          app:showAsAction="never"/>
    <item android:id="@+id/action_adjust_8"
          android:title="Adjust 8"
          android:orderInCategory="100"
          app:showAsAction="never"/>
</menu>

activity_main.xml:

<GridView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:columnWidth="70dp"
    android:minHeight="70dp"
    android:id="@+id/container"
    tools:context=".MainActivity" />

gridview_item.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="70dp"
                android:layout_height="70dp">
    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:id="@+id/tv_text"
            android:text=""/>
</RelativeLayout>

Demo:
enter image description here

Upvotes: 2

Related Questions