Creați listview în fragmentul android (Programare, Android, Listview, Fragmente Android)

gamo a intrebat.

După cum arată titlul, vreau să creez un listview cu rând personalizat în Fragment. Codul meu de mai jos.

Clasa Fragment

public class PhotosFragment extends Fragment{

public PhotosFragment(){}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.fragment_photos, container, false);

    ArrayList<ListviewContactItem> listContact = GetlistContact();
    ListView lv = (ListView)getActivity().findViewById(R.id.lv_contact);
    lv.setAdapter(new ListviewContactAdapter(getActivity(), listContact));

    return rootView;
}

private ArrayList<ListviewContactItem> GetlistContact(){
    ArrayList<ListviewContactItem> contactlist = new ArrayList<ListviewContactItem>();

    ListviewContactItem contact = new ListviewContactItem();

    contact.SetName("Topher");
    contact.SetPhone("01213113568");
    contactlist.add(contact);

    contact = new ListviewContactItem();
    contact.SetName("Jean");
    contact.SetPhone("01213869102");
    contactlist.add(contact);

    contact = new ListviewContactItem();
    contact.SetName("Andrew");
    contact.SetPhone("01213123985");
    contactlist.add(contact);

    return contactlist; 
    }   
}

Clasa adaptor

public class ListviewContactAdapter extends BaseAdapter{
private static ArrayList<ListviewContactItem> listContact;

private LayoutInflater mInflater;

public ListviewContactAdapter(Context photosFragment, ArrayList<ListviewContactItem> results){
    listContact = results;
    mInflater = LayoutInflater.from(photosFragment);
}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return listContact.size();
}

@Override
public Object getItem(int arg0) {
    // TODO Auto-generated method stub
    return listContact.get(arg0);
}

@Override
public long getItemId(int arg0) {
    // TODO Auto-generated method stub
    return arg0;
}


public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    ViewHolder holder;
    if(convertView == null){
        convertView = mInflater.inflate(R.layout.contact_item, null);
        holder = new ViewHolder();
        holder.txtname = (TextView) convertView.findViewById(R.id.lv_contact_item_name);          
        holder.txtphone = (TextView) convertView.findViewById(R.id.lv_contact_item_phone);

        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.txtname.setText(listContact.get(position).GetName());
    holder.txtphone.setText(listContact.get(position).GetPhone());

    return convertView;
}

static class ViewHolder{
    TextView txtname, txtphone;
}
}

Dar când execut aplicația care nu afișează nimic. Ar putea cineva să-mi spună ce este în neregulă aici și cum pot să o rezolv?

Comentarii

  • Nu, rulează bine, dar nu afișează nimic în fragment. –  > Por gamo.
  • Și eu încerc același lucru. Poți să-mi dai codul sursă complet? –  > Por gangadhars.
  • Toate lucrurile pe care le-am postat în quensionul meu. Și puteți găsi, de asemenea, multe tutoriale despre listview pe Google. –  > Por gamo.
  • pentru mine prea același lucru nu se dovedește aici codul meu stackoverflow.com/questions/26254727/… -… –  > Por utilizator3796282.
  • Bună @gamo poți să-mi arăți codul pentru layout „contact_item” și Java „ListviewContactItem”. Încerc să fac ceva similar. –  > Por vikas devde.
5 răspunsuri
Raghunandan

Cred că aplicația dvs. se blochează din cauza NullPointerException.

Schimbați acest lucru

ListView lv = (ListView)getActivity().findViewById(R.id.lv_contact);

în

ListView lv = (ListView)rootView.findViewById(R.id.lv_contact);

presupunând că listview aparține aspectului fragment.

Restul codului pare în regulă

Editați:

Ei bine, din moment ce ai spus că nu funcționează, am încercat și eu.

Comentarii

  • @user3422401 în regulă, voi încerca codul tău și voi reveni în 5 minute. Dar codurile arată bine –  > Por Raghunandan.
  • @user3422401 funcționează bine am făcut doar modificări așa cum am sugerat în postarea mea. –  > Por Raghunandan.
  • @user3422401 verificați dacă snap-urile funcționează bine. Deci, avem nevoie de mai multe informații. Codul postat este în regulă. Unde adăugați fragmentul la activitate. postați layout-urile xml –  > Por Raghunandan.
  • Am încercat, dar nu funcționează pentru mine. Clasa mea Fragment în interiorul unui meniu glisant apelat de MainActivity, dar cred că nu este important. –  > Por gamo.
  • @user3422401 AFAIK nu este nimic în neregulă în codul pe care l-ați postat. Este ceva în neregulă în altă parte unde –  > Por Raghunandan.
Julisch

Vă rugăm să utilizați ListFragment. În caz contrar, nu va funcționa.

EDIT 1:Atunci veți avea nevoie doar de setListAdapter() și getListView().

Comentarii

user3936680

trebuie să dați:

public void onActivityCreated(Bundle savedInstanceState)    
{
  super.onActivityCreated(savedInstanceState);
}

în interiorul fragmentului.

IntelliJ Amiya

Metoda inflate() ia trei parametri:

  1. Id-ul unui fișier XML de layout (în interiorul R.layout),
  2. Un ViewGroup părinte în care trebuie să fie inserată vizualizarea fragmentului,

  3. Un al treilea boolean care indică dacă vizualizarea fragmentului, așa cum a fost umflată din fișierul XML de prezentare, trebuie inserată în grupul de vizualizare părinte.

În acest caz, trecem false, deoarece View va fi atașat la ViewGroup-ul părinte în altă parte, de către un cod Android pe care îl apelăm (cu alte cuvinte, în spatele nostru). Atunci când treceți false ca ultim parametru la inflate(), ViewGroup-ul părinte este în continuare utilizat pentru calculele de aspect ale vizualizării umflate, deci nu puteți trece null ca ViewGroup părinte .

 View rootView = inflater.inflate(R.layout.fragment_photos, container, false);

Așadar, trebuie să apelați rootView aici

ListView lv = (ListView)rootView.findViewById(R.id.lv_contact);

VictorPurMar

în schimb:

public class PhotosFragment extends Fragment

Puteți utiliza:

public class PhotosFragment extends ListFragment

Se schimbă metodele

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        ArrayList<ListviewContactItem> listContact = GetlistContact();
        setAdapter(new ListviewContactAdapter(getActivity(), listContact));
    }

onActivityCreated este void și nu trebuia să returnezi o vizualizare ca în onCreateView

Puteți vedea un exemplu aici