Display empty item in grid mode

In the home scree of the app, how to display a menu similar to the Android menu, but no items should be displayed in certain cells. Given a 3 x 3 grid, only five items (Row, Col) need to be displayed: [0,1], [1,0], [1,1], [1,2], [2,1].

We tried GridView and set GONE visibility (convertView.setVisibility (View.GONE);) for items that shouldn't be displayed. The item is then not displayed in the grid, but when the user views an empty item using the up and down keys, or clicks directly on the empty item, the icon is displayed and selected as if it were an empty item in the grid. We want it to be empty, it shouldn't react to custom events that weren't highlighted unselected.

Code to view the grid:

package org.XXX;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class XXXActivity extends Activity {
    GridView MyGrid;

    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.maingrid);
        MyGrid = (GridView)findViewById(R.id.MyGrid);
        MyGrid.setAdapter(new ImageAdapter(this));


        MyGrid.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
                Toast.makeText(arg0.getContext(), position + " selected", Toast.LENGTH_LONG).show();

                switch(position) {
                case 0:break;
                case 1:
                    //Browse
                    Intent newIntent = new Intent(XXXActivity.this, YYYListItemIcons.class);
                    startActivity(newIntent);
                    break;
                case 2:break;
                case 3:
                    //Saved Searches
                    newIntent = new Intent(XXXActivity.this, ZZZListItemIcons.class);
                    startActivity(newIntent);
                    break;
                case 4:
                    //Sign in
                    break;
                case 5:
                    //Reminders
                    break;
                case 6:break;
                case 7:
                    //Sign up
                    break;
                case 8:break;
                }
            }

        });

        //onSearchRequested(); //to open search by default
    }


    public class ImageAdapter extends BaseAdapter
    {
        Context MyContext;

        public ImageAdapter(Context _MyContext)
        {
            MyContext = _MyContext;
        }

        @Override
        public int getCount()
        {
            return 9;
        }

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

            ViewHolder holder;
            LayoutInflater mInflater = LayoutInflater.from(MyContext);

            if (convertView == null) {
                convertView = mInflater.inflate(R.layout.grid_item, null);
                holder = new ViewHolder();
                holder.text = (TextView) convertView.findViewById(R.id.grid_item_text);
                holder.icon = (ImageView) convertView.findViewById(R.id.grid_item_image);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }

            // Bind the data efficiently with the holder.
            holder.text.setText(getTextId(position));
            holder.icon.setImageBitmap(BitmapFactory.decodeResource(MyContext.getResources(), getIconId(position)));
            if(getIconId(position) == R.drawable.nothing) {
                convertView.setVisibility(View.GONE);
            }
            return convertView;
        }

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

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

        private int getIconId(int position) {
            int iconImages[] = {
                    R.drawable.nothing,
                    R.drawable.browse,
                    R.drawable.nothing,
                    R.drawable.saved_searches,
                    R.drawable.sign_in,
                    R.drawable.reminders,
                    R.drawable.nothing,
                    R.drawable.sign_up,
                    R.drawable.nothing
            };
            return iconImages[position];
        }

        private int getTextId(int position) {
            int iconNames[] = {
                    R.string.nothing,
                    R.string.browse,
                    R.string.nothing,
                    R.string.saved_searches,
                    R.string.sign_in,
                    R.string.reminders,
                    R.string.nothing,
                    R.string.sign_up,
                    R.string.nothing
            };
            return iconNames[position];
        }

    }

    static class ViewHolder {
        TextView text;
        ImageView icon;
    }

}

      

GridLayout:

<GridView xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/MyGrid"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_gravity="center"
    android:padding="5dp"
    android:verticalSpacing="5dp"
    android:horizontalSpacing="20dp"
    android:numColumns="auto_fit"
    android:columnWidth="60dp"
    android:stretchMode="columnWidth"
    android:gravity="center">
</GridView>            

      

PerItemIconLayout in grid:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/GridItem"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:orientation="vertical"
   android:gravity="center_horizontal">

   <ImageView android:id="@+id/grid_item_image"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content">
   </ImageView>

   <TextView android:id="@+id/grid_item_text"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="TextView"
      android:gravity="center_horizontal"
      android:textColor="#FFFFFF">
   </TextView>

</LinearLayout>

      

+3


source to share


2 answers


Now that you've posted your code, I'm not sure if you can technically remove it, but you can disable the "highlighted" click you're talking about so that when the user clicks on one of the icons, it won't highlight anymore.

This can be done via XML or in your code:

https://stackoverflow.com/questions/2865683/android-disable-highlighting-in-gridview

Code: GridView.setSelector(new ColorDrawable(Color.TRANSPARENT));
XML: android:listSelector="#00000000"

      



However, this will affect all icons in your gridview.

Also take a look at this:

https://stackoverflow.com/questions/5514629/how-to-disable-item-click-for-particular-positions-in-grid -view-in-android

0


source


if(getIconId(position) == R.drawable.nothing) {
convertView.setVisibility(View.GONE);
}

      

replace the above lines with below and try ....



if(getIconId(position) == R.drawable.nothing) {
   convertView.setVisibility(View.GONE);
   convertView.setClickable(false);
   convertView.setEnabled(false);
}

      

try this code in getview ().

0


source







All Articles