[英]setAdapter doesn't work on Fragment
我目前有一個“片段活動”,但是我無法使適配器正常工作。 在我的Fragment Activity中,我在setAdapter行上出錯。 這是我的片段:
package com.oneapp.tiradentes;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import java.util.ArrayList;
public class FragmentA extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView=inflater.inflate(R.layout.activity_main4,container,false);
ArrayList<Carro> carros = new ArrayList<Carro>();
for(int i = 0; i < 5; i++){
Carro carro = new Carro();
carro.setModelo("Carro "+(i + 1));
carro.setMarca("Marca "+(i + 1));
carros.add(carro);
}
ListView lv = (ListView) getView().findViewById(R.id.lv);
lv.setAdapter(new CarroAdapter(this, carros));
return rootView;
}
}
在此行顯示錯誤:
lv.setAdapter(new CarroAdapter(this, carros));
拜托,有人可以幫我嗎?
我的適配器:包com.oneapp.tiradentes;
import java.util.ArrayList;
import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class CarroAdapter extends BaseAdapter {
private Context context;
private ArrayList<Carro> lista;
public CarroAdapter(Context context, ArrayList<Carro> lista){
this.context = context;
this.lista = lista;
}
@Override
public int getCount() {
return lista.size();
}
@Override
public Object getItem(int position) {
return lista.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Carro carro = lista.get(position);
View layout;
if(convertView == null){
LayoutInflater inflater = (LayoutInflater) context.getSystemService
(Context.LAYOUT_INFLATER_SERVICE);
layout = inflater.inflate(R.layout.carros, null);
}
else{
layout = convertView;
}
TextView modelo = (TextView) layout.findViewById(R.id.t1);
modelo.setText(carro.getModelo());
TextView marca = (TextView) layout.findViewById(R.id.t2);
marca.setText(carro.getMarca());
ImageView iv = (ImageView) layout.findViewById(R.id.iv);
iv.setImageResource(carro.getCarroImagem(position));
if(position % 2 == 0){
layout.setBackgroundColor(Color.YELLOW);
}
return layout;
}
}
錯誤:
carroAdapter (android.content.Context, ArrayList<Carro>) in
CarroAdapter cannot be applied to (com.oneapp.tiradentes.FragmentA ,
ArrayList<Carro>)
代替這個:
ListView lv = (ListView) getView().findViewById(R.id.lv);
嘗試使用此:
ListView lv = (ListView) rootView.findViewById(R.id.lv);
因為getView()
將在方法onCreateView
之后准備好
您的CarroAdapter
將上下文作為第一個參數,並且您是從片段類發送this
上下文,這意味着您正在發送FragmentA
實例。 更改為
lv.setAdapter(new CarroAdapter(getActivity(), carros));
還應嘗試避免將Context
保留為成員,在適配器中,您僅在以下位置使用上下文
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
您可以替換為
LayoutInflater inflater = (LayoutInflater) parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
在此處修改代碼:
ListView lv = (ListView) getView().findViewById(R.id.lv);
lv.setAdapter(new CarroAdapter(getActivity(),carros));
這是因為該片段不包含任何上下文。 您必須在這里通過活動。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.