2017-08-30 1 views
-1

Ich möchte Liste mit benutzerdefinierten Arrayadapter anzeigen, das Problem ist meine erste und letzte Element sind die gleichen tatsächlich gibt es vier Elemente in meiner ArrayList, aber das vierte Element wird nicht angezeigt und stattdessen zeigt es die erste Gegenstand und manchmal auch umgekehrt. Hier ist mein Code, ich bin ein kompletter Anfänger und weiß nicht, welchen Code ich hier schreiben soll.erster und letzter Eintrag von listView sind gleich

Place.java (benutzerdefinierte Klasse für Listenelement)

/** Image resource ID for the Place */ 
private int mImageResourceId; 
/**Description ID for the Place */ 
private int mDescriptionId; 
/**Name ID for the Place */ 
private int mNameId; 

/** 
* Create a new Word object. 
* 
* @param imageResourceId is the image resource ID for the image of place 
* @param nameId is the string resource Id for the name of place 
* @param descriptionId is the string resource ID for the description associated with this place 
*/ 
public Place(int imageResourceId, int nameId, int descriptionId) { 
    mImageResourceId = imageResourceId; 
    mNameId= nameId; 
    mDescriptionId =descriptionId; 
} 

public int getImageResourceId(){return mImageResourceId;} 

public int getDescriptionId(){return mDescriptionId;} 

public int getNameId() {return mNameId;}} 

PlaceAdapter.java (custom Adapterfor meine lsit)

public class PlaceAdapter extends ArrayAdapter<Place> { 


public PlaceAdapter(Context context, ArrayList<Place> place) { 
    super(context, 0, place); 
} 

@NonNull 
@Override 
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { 
    View listItemView = convertView; 
    if (listItemView == null) { 
     listItemView = LayoutInflater.from(getContext()).inflate(
       R.layout.list_item, parent, false); 

     Place currentPlace = getItem(position); 

     TextView name = (TextView) listItemView.findViewById(R.id.name); 
     name.setText(currentPlace.getNameId()); 

     TextView description = (TextView) listItemView.findViewById(R.id.description); 
     description.setText(currentPlace.getDescriptionId()); 

     ImageView image = (ImageView) listItemView.findViewById(R.id.image); 
     image.setImageResource(currentPlace.getImageResourceId()); 

    } 
    return listItemView; 
} 
} 

HistoricFragment.java (Fragment enthält ein Listview)

public class HistoricFragment extends Fragment { 

public HistoricFragment() { 
    // Required empty public constructor 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View rootView = inflater.inflate(R.layout.place_list, container, false); 

    // Create a list of Place 
    final ArrayList<Place> place = new ArrayList<Place>(); 
    place.add(new Place(R.drawable.badshahi_mosque, R.string.badshahi_name, 
      R.string.badshahi_description)); 
    place.add(new Place(R.drawable.lahore_fort, R.string.fort_name, 
      R.string.fort_description)); 
    place.add(new Place(R.drawable.sheesh_mahal_lahore_fort, R.string.mahal_name, 
      R.string.mahal_description)); 
    place.add(new Place(R.drawable.wazir_mosque, R.string.wazir_khan_name, 
      R.string.wazir_mosque_description)); 

    // Create an {@link PlaceAdapter}, whose data source is a list of {@link Place}s. The 
    // adapter knows how to create list items for each item in the list. 
    PlaceAdapter adapter = new PlaceAdapter(getActivity(), place); 

    // Find the {@link ListView} object in the view hierarchy of the {@link Activity}. 
    // There should be a {@link ListView} with the view ID called list, which is declared in the 
    // place_list.xml layout file. 
    ListView listView = (ListView) rootView.findViewById(R.id.list); 

    // Make the {@link ListView} use the {@link PlaceAdapter} we created above, so that the 
    // {@link ListView} will display list items for each {@link Place} in the list. 
    listView.setAdapter(adapter); 

    return rootView; 
} 
} 

Antwort

0

Code ändern wie diese

public class PlaceAdapter extends ArrayAdapter<Place> { 


    public PlaceAdapter(Context context, ArrayList<Place> place) { 
     super(context, 0, place); 
    } 

    @NonNull 
    @Override 
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { 
     ViewHolder holder; 
     View listItemView; 
     if (convertView == null) { 
      listItemView = LayoutInflater.from(getContext()).inflate(
        R.layout.list_item, parent, false); 

      holder = new ViewHolder(); 
      holder.name = (TextView) listItemView.findViewById(R.id.name); 
      holder.description = (TextView) listItemView.findViewById(R.id.description); 
      holder.image = (ImageView) listItemView.findViewById(R.id.image); 

      convertView.setTag(holder); 
     } 

     holder = (ViewHolder) convertView.getTag(); 

     Place currentPlace = getItem(position); 
     holder.name.setText(currentPlace.getNameId()); 
     holder.description.setText(currentPlace.getDescriptionId()); 
     holder.image.setImageResource(currentPlace.getImageResourceId()); 
     return convertView; 
    } 

    public static class ViewHolder { 
     TextView name; 
     TextView description; 
     ImageView image; 
    } 

} 
0
@Override 
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { 
     View listItemView = convertView; 
     if (listItemView == null) { 
      listItemView = LayoutInflater.from(getContext()).inflate(
       R.layout.list_item, parent, false); 
     } 
     Place currentPlace = getItem(position); 

     TextView name = (TextView) listItemView.findViewById(R.id.name); 
     name.setText(currentPlace.getNameId()); 

     TextView description = (TextView) listItemView.findViewById(R.id.description); 
     description.setText(currentPlace.getDescriptionId()); 

     ImageView image = (ImageView) listItemView.findViewById(R.id.image); 
     image.setImageResource(currentPlace.getImageResourceId()); 
     return listItemView; 
} 

Dies wird das Problem lösen. Aber Sie können Google und verwenden Sie Viewholder-Muster, die effizienter ist.

+0

, dass dank geholfen. – Aashir

+0

Immer willkommen :-) –

Verwandte Themen