簡體   English   中英

setAdapter在Fragment上不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM