2017-03-15 58 views
-2

我用GridView適配器創建了一個音板,但我遇到了兩個問題。安裝適配器和GridView中的片段

  1. 它說

「CustomGridAdapter不能應用於」

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

  • 它說
  • 「無法解析方法itemClicked(INT)」

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

    這裏是我的mFragment.java文件:

    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; 
         } 
    
        } 
    } 
    

    我怎樣才能解決這個兩個問題?

    回答

    2

    1)替換此:

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

    隨着:

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

    2)在CustomAdapter修改如下:

    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); 
        } 
    

    希望這有助於。

    +0

    無論我以前不幫:( – DaFaack

    +0

    什麼錯誤,現在展示? – tahsinRupam

    +0

    查看我的更新回答。 – tahsinRupam

    1

    試試這個:

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

    CustomGridAdapter

    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); 
        } 
    

    現在的點擊監聽器使用:

    button.setOnClickListener(new View.OnClickListener() { 
    
          @Override 
          public void onClick(View v) { 
           if(context instanceof MainActivity) { 
            ((MainActivity) context).itemClicked(position); 
           } 
          } 
         });