Android 在 Fragment 中带有 GridView 的适配器
Android adapter with GridView in Fragment
我用 GridView
适配器创建了音板,但我遇到了两个问题。
- 它说
"CustomGridAdapter cannot be applied"
myGridView.setAdapter(new CustomGridAdapter(getActivity(), items));
- 它说
"Cannot resolve method 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;
}
}
}
我该如何解决这两个问题?
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);
}
希望对您有所帮助。
试试这个:
gridView.setAdapter(new CustomGridAdapter(getActivity(), items));
在 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);
}
点击监听器现在使用:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(context instanceof MainActivity) {
((MainActivity) context).itemClicked(position);
}
}
});
我用 GridView
适配器创建了音板,但我遇到了两个问题。
- 它说
"CustomGridAdapter cannot be applied"
myGridView.setAdapter(new CustomGridAdapter(getActivity(), items));
- 它说
"Cannot resolve method 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;
}
}
}
我该如何解决这两个问题?
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);
}
希望对您有所帮助。
试试这个:
gridView.setAdapter(new CustomGridAdapter(getActivity(), items));
在 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);
}
点击监听器现在使用:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(context instanceof MainActivity) {
((MainActivity) context).itemClicked(position);
}
}
});