Ich habe die Dokumentation zur Verwendung von GridView befolgt und hatte das gleiche Problem wie dieser Typ. ImageAdapter kann nicht auf eine Fragmentklasse angewendet werden
Der Code in meiner Fragmentklasse lautet wie folgt
public class SecondFragment extends Fragment {
View myView;
GridView gridview;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
myView = inflater.inflate(R.layout.second_layout, container, false);
gridview = (GridView) myView.findViewById(R.id.gridview);
gridview.setAdapter(new ImageAdapter(getActivity()));
return myView;
}
}
In der vorletzten Zeile "Image Adapter kann nicht auf android.app.activity angewendet werden" wird jedoch eine Fehlermeldung angezeigt.
Mein ImageAdapter lautet wie folgt
public class ImageAdapter extends BaseAdapter {
private Context mcontext;
@Override
public int getCount() {
return mthumbids.length;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
imageView = new ImageView(mcontext);
imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(8, 8, 8, 8);
}
else {
imageView = (ImageView)convertView;
}
return imageView;
}
private Integer[] mthumbids =
{
R.drawable.img1, R.drawable.img2,
R.drawable.img3, R.drawable.img4,
R.drawable.img5, R.drawable.img6
};
}
4 Antworten
Sie benötigen einen Konstruktor in Ihrer ImageAdapter
- Klasse, der den Kontext als Parameter verwendet.
Und Sie müssen den Hintergrund des Bildes auch basierend auf der Adapterposition einstellen.
Hier ist die modifizierte Adapterklasse.
public class ImageAdapter extends BaseAdapter {
private Context mcontext;
public ImageAdapter (Context context) {
mContext = context;
}
@Override
public int getCount() {
return mthumbids.length;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
imageView = new ImageView(mcontext);
imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(8, 8, 8, 8);
// Add the following to load the image
imageView.setBackground(ContextCompat.getDrawable(context, mthumbids[position]));
}
else {
imageView = (ImageView)convertView;
}
return imageView;
}
private Integer[] mthumbids =
{
R.drawable.img1, R.drawable.img2,
R.drawable.img3, R.drawable.img4,
R.drawable.img5, R.drawable.img6
};
}
Sie können den Kontext auch vom übergeordneten Element in getView()
abrufen. Dann müssen Sie den Kontext nicht übergeben und speichern. Ihr getView
sieht also so aus:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
Context context = parent.getContext(); // <-- add this line
imageView = new ImageView(context); // use the context from the parent
imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(8, 8, 8, 8);
}
else {
imageView = (ImageView)convertView;
}
return imageView;
}
Fehlender Konstruktor mit Argumentkontext für ImageAdapter. Es wird automatisch nur ein leerer Konstruktor erstellt. Sie sollten Konstruktoren mit bestimmten Argumentwerten schreiben.
public ImageAdapter(Context context){
MContext = Kontext; }}
Fügen Sie diesen Code in die ImageAdapter-Klasse ein.
public ImageAdapter (Context context) {
super();
mContext = context;
}
Verwandte Fragen
Neue Fragen
java
Java ist eine Programmiersprache auf hoher Ebene. Verwenden Sie dieses Tag, wenn Sie Probleme haben, die Sprache selbst zu verwenden oder zu verstehen. Dieses Tag wird selten alleine verwendet und wird am häufigsten in Verbindung mit [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] und [maven] verwendet.