我想用自定義的arrayadapter顯示列表,問題是我的第一個和最後一個項目是相同的居然有我的ArrayList的四個項目,但第四個項目沒有顯示,而是它表示第一項目,有時反之亦然。這裏是我的代碼,我是一個完整的初學者,所以不知道在這裏發佈哪些代碼是必要的。第一和最後一個項目是相同
Place.java(用於列表項自定義類)
/** 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(定製Adapterfor我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(片段包含一個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;
}
}
這幫助表示感謝。 – Aashir
永遠歡迎:-) –