-2

I created a soundboard with a GridView adapter, but I'm getting two issues.

  1. It says

"CustomGridAdapter cannot be applied"

myGridView.setAdapter(new CustomGridAdapter(getActivity(), items));

  1. It says

"Cannot resolve method itemClicked(int)"

              ` @Override
                public void onClick(View v) {
                    context.itemClicked(position);
                }
            });`

Here is my mFragment.java file:

package com.aaron.waller.girdlayoutmanagertest.mFragments;

import android.content.Context;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutCompat;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.GridView;

import com.aaron.waller.girdlayoutmanagertest.MainActivity;
import com.aaron.waller.girdlayoutmanagertest.R;

public class erstesFragment extends Fragment {

    GridView gridView;
    MediaPlayer mp;
    public String[] items ={"Button1","Button2","Button3","Button4","Button5","Button6"};

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView=inflater.inflate(R.layout.erstes_fragment,container,false);


        gridView= (GridView)rootView.findViewById(R.id.gridView1);
        gridView.setAdapter(new CustomGridAdapter(getActivity(), items));

        return rootView;
    }
    public void itemClicked(int position) {

        if(position == 0){
            mp = MediaPlayer.create(getActivity(), R.raw.sound1);
            mp.start();
        }else if(position == 1){
            mp = MediaPlayer.create(getActivity(), R.raw.sound2);
            mp.start();

        }else if(position == 2) {
            mp = MediaPlayer.create(getActivity(), R.raw.sound3);
            mp.start();
        }
        else if(position == 3) {
            mp = MediaPlayer.create(getActivity(), R.raw.sound4);
            mp.start();
        }
        else if(position == 4) {
            mp = MediaPlayer.create(getActivity(), R.raw.sound5);
            mp.start();
        }
        else if(position == 5) {
            mp = MediaPlayer.create(getActivity(), R.raw.sound6);
            mp.start();
        }

    }

    public class CustomGridAdapter extends BaseAdapter {

        private MainActivity context;
        private String[] items;
        LayoutInflater inflater;

        public CustomGridAdapter(MainActivity context, String[] items) {
            this.context = context;
            this.items = items;
            inflater = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }


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

        @Override
        public Object getItem(int position) {
            return items[position];
        }

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

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

            if (convertView == null) {
                convertView = inflater.inflate(R.layout.single_item, null);
            }
            Button button = (Button) convertView.findViewById(R.id.button);
            button.setText(items[position]);
            button.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    context.itemClicked(position);
                }
            });

            return convertView;
        }

    }
}

How can I solve this two issues?

rafsanahmad007
  • 23,683
  • 6
  • 47
  • 62
Aaron Waller
  • 175
  • 4
  • 21

2 Answers2

3

1) Replace this:

gridView.setAdapter(new CustomGridAdapter(getActivity(), items));

With:

gridView.setAdapter(new CustomGridAdapter(this, items));

2) In CustomAdapter modify as following:

    private Context context;
    private String[] items;
    LayoutInflater inflater;

    public CustomGridAdapter(Context context, String[] items) {
        this.context = context;
        this.items = items;
        inflater = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

Hope this helps.

tahsinRupam
  • 6,325
  • 1
  • 18
  • 34
  • Both did't helped :( – Aaron Waller Mar 15 '17 at 18:18
  • I removed the itemClicked method and pasted it into my MainActivity, so the seconds issue was solved, then I pasted this line in my Fragment: `public MainActivity activity = (MainActivity) getActivity() ;` this solved the first issue. But my application won't open now :( And the Logcat is showing nothing, for whatever reason. – Aaron Waller Mar 15 '17 at 18:34
  • "But my application won't open now" means your app is crashing. There has to be something in the logcat. Please clear and restart logcat then try debugging again. – tahsinRupam Mar 15 '17 at 18:37
1

try this:

 gridView.setAdapter(new CustomGridAdapter(getActivity(), items));

in CustomGridAdapter class

public class CustomGridAdapter extends BaseAdapter{

    private Context context;
    private String[] items;
    LayoutInflater inflater;

    public CustomGridAdapter(Context c, String[] items) {
        this.context = c;
        this.items = items;
        inflater = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

Now for the click listener use:

button.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                if(context instanceof MainActivity) {
                    ((MainActivity) context).itemClicked(position);
                }
            }
        });
rafsanahmad007
  • 23,683
  • 6
  • 47
  • 62