Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to add a TextView to a GridView in Android

I already know how to add String's to a gridView in android however I want to add textviews to format the text( Gravity, color, etc). This is my current code:

GridView gridView = (GridView) findViewById(R.id.grades);
    ArrayList<TextView> display = new ArrayList<TextView>();
    ArrayAdapter<TextView> adapter = new ArrayAdapter<TextView>(this,
            android.R.layout.simple_list_item_1, display);

    gridView.setAdapter(adapter);
    for(int i = 0; i<currentClass.grades.size(); i++)
    {
        TextView name = new TextView(this);
        TextView weight = new TextView(this);
        TextView cur_points = new TextView(this);
        TextView total_points = new TextView(this);
        TextView cur_percent = new TextView(this);

        name.setText(currentClass.grades.get(i).name);
        weight.setText(currentClass.grades.get(i).weight);
        cur_points.setText(currentClass.grades.get(i).cur_points);
        total_points.setText(currentClass.grades.get(i).total_points);
        cur_percent.setText(currentClass.grades.get(i).cur_percent);

        name.setTextColor(Color.WHITE);
        weight.setTextColor(Color.WHITE);
        cur_points.setTextColor(Color.WHITE);
        total_points.setTextColor(Color.WHITE);
        cur_percent.setTextColor(Color.WHITE);

        name.setSingleLine(true);
        weight.setSingleLine(true);
        cur_points.setSingleLine(true);
        total_points.setSingleLine(true);
        cur_percent.setSingleLine(true);

        name.setGravity(Gravity.LEFT);
        weight.setGravity(Gravity.RIGHT);
        cur_points.setGravity(Gravity.RIGHT);
        total_points.setGravity(Gravity.RIGHT);
        cur_percent.setGravity(Gravity.RIGHT);

        display.add(name);
        display.add(weight);
        display.add(cur_points);
        display.add(total_points);
        display.add(cur_percent);

        adapter.notifyDataSetChanged();
    }

Unfortunately when I run it the gridview simply gives me the information of each TextView: "android.id.widget.TextView({42f20a88 and so on}.

How would I add textview's to a gridView?

like image 339
Joe Smith Avatar asked Mar 15 '14 21:03

Joe Smith


People also ask

How to set text in GridView in Android?

gridView. setAdapter(new TextViewAdapter(this, YOUR_ARRAY_WITH_TEXT_FOR_TEXTVIEWS)); also note that you can pass any other values like color of text and as another argument in constructor and then set them in adapter like ...

How to use GridView in XML in Android?

Create an XML file for each grid item to be displayed in GridView. Click on the app > res > layout > Right-Click > Layout Resource file and then name the file as card_item. Below is the code for the card_item. xml file.

How to Create GridView in Android programmatically?

This is how you can create gridview programmatically, GridView grid = new GridView(this); grid. setId(ViewIdentification. getId()); grid.


1 Answers

try it with something like this

gridview.xml

<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/gridView1"
    android:numColumns="auto_fit"
    android:gravity="center"
    android:columnWidth="100dp"
    android:stretchMode="columnWidth"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

</GridView>

item.xml

<TextView
    android:id="@+id/grid_item_label"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@+id/label"
    android:layout_marginTop="5px"
    android:textSize="15px" >
</TextView>

Custom adapter class for textView

public class TextViewAdapter extends BaseAdapter {
        private Context context;
        private final String[] textViewValues;

        public TextViewAdapter(Context context, String[] textViewValues) {
            this.context = context;
            this.textViewValues = textViewValues;
        }

        public View getView(int position, View convertView, ViewGroup parent) {

            LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            View gridView;

            if (convertView == null) {

                gridView = new View(context);

                // get layout from mobile.xml
                gridView = inflater.inflate(R.layout.item, null);

                // set value into textview
                TextView textView = (TextView) gridView
                        .findViewById(R.id.grid_item_label);
                textView.setText(textViewValues[position]);  
            } else {
                gridView = (View) convertView;
            }

            return gridView;
        }

        @Override
        public int getCount() {
            return textViewValues.length;
        }

        @Override
        public Object getItem(int position) {
            return null;
        }

        @Override
        public long getItemId(int position) {
            return 0;
        }

    }

and then , finally set adapter in your main class

gridView.setAdapter(new TextViewAdapter(this, YOUR_ARRAY_WITH_TEXT_FOR_TEXTVIEWS));

also note that you can pass any other values like color of text and as another argument in constructor and then set them in adapter like ...

textView.setColor(textViewColors[position]); 

for attributes that all textview have in common you can change the item.xml only :) i hope it helped you ....

like image 182
Matej Špilár Avatar answered Sep 28 '22 17:09

Matej Špilár