M.Vignati
M.Vignati

Reputation: 13

Start Activity from GridView

I create a GridView and I want to start some activities from each button. The gridView is in a class called Status, the code as follows:

public class Status extends AppCompatActivity {

    Toolbar toolbar;
    CollapsingToolbarLayout collapsingToolbarLayoutAndroid;
    CoordinatorLayout rootLayoutAndroid;
    GridView gridView;

    public static String[] gridViewStrings = {
            "Stato",
            "Allarmi",
            "Impostazioni",
            "Numero SIM",
            "Dati Impianto",
            "Esci",

    };
    public static int[] gridViewImages = {
            R.drawable.chart,
            R.drawable.alert,
            R.drawable.set,
            R.drawable.sim_status,
            R.drawable.impianto2,
            R.drawable.close,
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.status);

        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        gridView = (GridView) findViewById(R.id.grid);
        gridView.setAdapter(new CustomAndroidGridViewAdapter(this, gridViewStrings, gridViewImages));

        gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {


                switch (position) {
                    case 0:
                        Intent i = new Intent(getApplicationContext(), Status.class);
                        i.putExtra("id", position);
                        startActivity(i);
                        break;

                    case 1:
                        finish();
                        break;
                }

            }
        });

        initInstances();


    }

    private void initInstances() {
        rootLayoutAndroid = (CoordinatorLayout) findViewById(R.id.android_coordinator_layout);
        collapsingToolbarLayoutAndroid = (CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar_android_layout);
        collapsingToolbarLayoutAndroid.setTitle("ESA MOBILE App");
    }
}

And my Adapter class as follows : I want to start activity from first button and to close the activity from second one, but doesn't work.

class CustomAndroidGridViewAdapter extends BaseAdapter {
    private Context mContext;
    private final String[] string;
    private final int[] Imageid;

    CustomAndroidGridViewAdapter(Context c,String[] string,int[] Imageid ) {
        mContext = c;
        this.Imageid = Imageid;
        this.string = string;
    }

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

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

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

    @SuppressLint("InflateParams")
    @Override
    public View getView(int p, View convertView, ViewGroup parent) {
        View grid;
        LayoutInflater inflater = (LayoutInflater) mContext
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        if (convertView == null) {

            grid = inflater.inflate(R.layout.gridview_custom_layout, null);
            TextView textView = (TextView) grid.findViewById(R.id.gridview_text);
            ImageView imageView = (ImageView)grid.findViewById(R.id.gridview_image);
            textView.setText(string[p]);
            imageView.setImageResource(Imageid[p]);
        } else {
            grid = convertView;
        }



        return grid;
    }
}

Upvotes: 1

Views: 770

Answers (2)

Doron Yakovlev Golani
Doron Yakovlev Golani

Reputation: 5470

I think you should update your getView() to set the correct click listener. It also seems you have a bug when you recycle views as you don't update them in the adapter (BTW, using a the View Holder pattern would make this code more efficient):

@SuppressLint("InflateParams")
@Override
public View getView(int p, View convertView, ViewGroup parent) {
    View grid;
    LayoutInflater inflater = (LayoutInflater) mContext
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    if (convertView == null) {
        grid = inflater.inflate(R.layout.gridview_custom_layout, null);
    } else {
        grid = convertView;
    }

    TextView textView = (TextView) grid.findViewById(R.id.gridview_text);
    ImageView imageView = (ImageView)grid.findViewById(R.id.gridview_image);
    textView.setText(string[p]);
    imageView.setImageResource(Imageid[p]);

    // Here you can set your click listener.
    // Another option is to have a OnClickListener array (like you have for the strings and images and use it in a similar way). 
    grid.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            switch (p) {
                case 0:
                    // Start activity
                    break;
                case 1:
                    // Close
                    break;
                default:
                    // Do something else
                    break;
            }
        }
    });
    return grid;
}

Upvotes: 1

aj0822ArpitJoshi
aj0822ArpitJoshi

Reputation: 1182

I am not sure but i think you are requesting click on the item(not on the ImageView inside the item)

so implement click in adapter after get the id of your parent or you can implement the click on your image in adapter like:

 imageView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

//Toast here

    }});

Upvotes: 0

Related Questions