GridView content disappears while scrolling

I have a GridView in my application in which I want to show text and checkboxes, just like in my inbox. I use an adapter for this, but when I show more than 15 elements, the text and checkboxes of the top lines disappear, so when I scroll up again they are not visible. Here is my code

 public class EmployeeAdaptor extends BaseAdapter { Context context; String [] table; int pos; int formatOfTable; public EmployeeAdaptor(Context c,String []tab,int numberOfItems,int format, boolean[] sel) { context = c; table = tab; items = numberOfItems; formatOfTable = format; //ifformat is 0 then show text view in first column //if it is 1 then show radio button in first column //if it is 2 then show check box in first column. pos = 0; } public int getCount() { // return items; } public Object getItem(int position) { // return position; } public long getItemId(int position) { // return position; } public View getView(final int position, View convertView, ViewGroup parent) { View v; TextView text = new TextView(context); RadioButton radio = new RadioButton(context); CheckBox check = new CheckBox(context); if(convertView == null){ v = new View(context); } else{ v = convertView; } if(formatOfTable==2 && position%5==0 && position/5!=0){ check.setId(position/5); v = check; } else if(formatOfTable==0 && position%5==0 && position/5!=0){ text.setText(""); v = text; //To set blank text at first position when no need of check } else{ if(position%5!=0){ try{ v = text; text.setText(table[pos]); text.setTextColor(Color.BLACK); text.setTextSize(20); pos++; } catch(Exception e){ } } } if(position/5==0){ text.setTypeface(Typeface.DEFAULT_BOLD); } return v; } } 

Adapter class call:

 table.setAdapter(new EmployeeAdaptor(this, empTable, numberofboxes, 0, selected)); //OR table.setAdapter(new EmployeeAdaptor(this, empTable, numberofboxes, 1, selected)); 

Layout XML File

 <GridView android:id="@+id/gridView1" android:layout_width="wrap_content" android:layout_height="360dp" android:layout_marginTop="40dp" android:numColumns="5" android:verticalSpacing="35dp"> </GridView> 
+6
source share
2 answers

The problem is that you are redefining the views incorrectly. The following minimal example is based on simplifying your code (I got rid of some members and some conditional blocks). Only two types of cells are considered, TextView and CheckBox .

 public class EmployeeAdaptor extends BaseAdapter { private Context context; public String [] table; private int items; public EmployeeAdaptor(Context c,String []tab,int numberOfItems) { context = c; items = numberOfItems; } @Override public int getCount() {return items;} @Override public Object getItem(int position) {return position;} @Override public long getItemId(int position) {return position;} @Override public int getItemViewType(int position) { int viewType; if (position%5 == 0 && position/5 != 0) { // Positions 5, 10, 15... // Return a CheckBox viewType = 0; } else { // Return a TextView viewType = 1; } return viewType; } @Override public int getViewTypeCount() { return 2; } @Override public View getView(int position, View convertView, ViewGroup parent) { View v; if (convertView == null) { if (position%5 == 0 && position/5 != 0) { // Positions 5, 10, 15... // Return a CheckBox v = new CheckBox(context); } else { // Return a TextView v = new TextView(context); } } else { v = convertView; } if (position < 5) { ((TextView)v).setTypeface(Typeface.DEFAULT_BOLD); ((TextView)v).setText(table[position]); } else if (position%5 == 0 && position/5 != 0) { // Positions 5, 10, 15... ((CheckBox)v).setId(position/5); } else { ((TextView)v).setTypeface(Typeface.DEFAULT); ((TextView)v).setText(table[position]); } return v; } } 

Note the use of getViewTypeCount and getItemViewType . They help you when your getView deals with different types of views.

+1
source

I think that the GridView is simply full and automatically scrolls down (therefore, the first elements “go away” at the top) when adding new elements. Is there room for more than 15 items? Especially since you set the height of your GridView to 360dp? You can set the background color in the GridView for debugging, to see how much space the GridView gets and how many the first 15 elements take.

-1
source

Source: https://habr.com/ru/post/923781/


All Articles