Android setAdapter不';不要在碎片上工作
我目前有一个片段活动,但我无法让我的适配器工作。 在片段活动中,setAdapter行出现错误。 这是我的片段:Android setAdapter不';不要在碎片上工作,android,android-fragments,fragment,Android,Android Fragments,Fragment,我目前有一个片段活动,但我无法让我的适配器工作。 在片段活动中,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
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;
}
}
拜托,有人能帮我吗
我的适配器:
包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;
}
}
import java.util.ArrayList;
导入android.content.Context;
导入android.graphics.Color;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.BaseAdapter;
导入android.widget.ImageView;
导入android.widget.TextView;
公共类CarroAdapter扩展BaseAdapter{
私人语境;
私人ArrayList lista;
公共CarroAdapter(上下文,ArrayList lista){
this.context=上下文;
this.lista=lista;
}
@凌驾
public int getCount(){
返回lista.size();
}
@凌驾
公共对象getItem(int位置){
返回lista.get(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
Carro Carro=lista.get(位置);
视图布局;
if(convertView==null){
LayoutInflater充气器=(LayoutInflater)context.getSystemService
(上下文、布局、充气机和服务);
布局=充气机。充气(R.layout.carros,空);
}
否则{
布局=转换视图;
}
TextView modelo=(TextView)layout.findviewbyd(R.id.t1);
modelo.setText(carro.getModelo());
TextView marca=(TextView)layout.findviewbyd(R.id.t2);
setText(carro.getMarca());
ImageView iv=(ImageView)布局。findViewById(R.id.iv);
iv.setImageResource(carro.getCarroImagem(职位));
如果(位置%2==0){
布局。背景颜色(颜色。黄色);
}
返回布局;
}
}
错误:
carroAdapter (android.content.Context, ArrayList<Carro>) in
CarroAdapter cannot be applied to (com.oneapp.tiradentes.FragmentA ,
ArrayList<Carro>)
中的carroAdapter(android.content.Context,ArrayList)
CarroAdapter无法应用于(com.oneapp.tiradentes.FragmentA,
ArrayList)
而不是这个:
ListView lv = (ListView) getView().findViewById(R.id.lv);
尝试使用以下方法:
ListView lv = (ListView) rootView.findViewById(R.id.lv);
因为
getView()
将在方法onCreateView
之后准备就绪,您的CarroAdapter
将上下文作为第一个参数,并且您正在从fragment类发送此
,这意味着您正在发送FragmentA
实例。
换成
lv.setAdapter(new CarroAdapter(getActivity(), carros));
另外,请尽量避免将上下文
作为成员保留在适配器中,因为您在适配器中仅使用上下文
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));
这是因为片段不包含任何上下文;您必须在此处传递活动。显示什么错误?也发布一些适配器类的代码。我觉得你打电话给构造器的方式不对。
ListView lv = (ListView) getView().findViewById(R.id.lv);
lv.setAdapter(new CarroAdapter(getActivity(),carros));