Truls89 Skrevet 24. januar 2011 Del Skrevet 24. januar 2011 Hei, Driver å utvikler en applikasjon der jeg trenger en aktivitet som tar inn objekter å legger det inn i et selvlagd ListView. Klarer ikke å se hva som har blitt gjort feil selv. Filene ligger vedlagt; Show - Objektene som skal vises i ListView public class Show { private String seats; private String time; private String place; private Date date; private String name; public Show(Date date, String name, String seats, String time, String place){ this.date = date; this.name = name; this.seats = seats; this.time = time; this.place = place; } ShowList - Selve aktiviten som vises i vinduet public class ShowList extends Activity { /** Called when the activity is first created. */ private ListView myListView; private ShowItemAdapter aa; private ArrayList<Show> list; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); list = new ArrayList<Show>(); int resID = R.layout.custom_row; aa = new ShowItemAdapter(this, resID, list); myListView = (ListView)findViewById(R.id.myListView); myListView.setAdapter(aa); populateList(); } private void populateList() { Date date; date = new Date("20/01"); Show show1 = new Show(date , "ISTID 3", "271 stk", "19:00", "Edda Kino Edda 1, Haugesund"); list.add(show1); aa.notifyDataSetChanged(); } ShowItemAdapter - Adapteret til listen public class ShowItemAdapter extends ArrayAdapter<Show>{ private int resource; public ShowItemAdapter(Context context, int resource, List<Show> objects) { super(context, resource, objects); this.resource = resource; } public View getView(int position, View convertView, ViewGroup parent) { LinearLayout showView; Show show = getItem(position); String seats = show.getSeats(); String time = show.getTime(); String place = show.getPlace(); Date date = show.getDate(); String name = show.getName(); SimpleDateFormat sdf = new SimpleDateFormat("dd/mm"); String dateString = sdf.format(date); /**hore */ if(convertView == null){ showView = new LinearLayout(getContext()); String inflater = Context.LAYOUT_INFLATER_SERVICE; LayoutInflater vi = (LayoutInflater)getContext().getSystemService(inflater); vi.inflate(resource, showView, true); }else{ showView = (LinearLayout) convertView; } TextView nameView = (TextView)showView.findViewById(R.id.customView_name); TextView dateView = (TextView)showView.findViewById(R.id.customView_date); TextView seatsView =(TextView)showView.findViewById(R.id.customView_seats); TextView timeView = (TextView)showView.findViewById(R.id.customView_time); TextView placeView = (TextView)showView.findViewById(R.id.customView_place); nameView.setText(name); dateView.setText(dateString); seatsView.setText(seats); timeView.setText(time); placeView.setText(place); return showView; } } XML (Tviler veldig på at det er noe feil med XML): main - layouten til selve hovedskjermen <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/lolTextView" android:text="Hore" android:layout_width="fill_parent" android:layout_height="fill_parent" /> <ListView android:id="@+id/myListView" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout> custom_row - layouten til hvert element i listen <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TableLayout android:id="@+id/customView_mainRow" android:layout_width="wrap_content" android:layout_height="fill_parent" android:padding="5px" android:layout_weight="9" android:layout_alignParentLeft="true"> <TableRow> <RelativeLayout android:id="@+id/customView_firstRow" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/customView_date" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:padding="2px" android:layout_alignParentLeft="true" /> <TextView android:id="@+id/customView_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="6" android:padding="2px" android:layout_toRightOf="@+id/customView_date" /> </RelativeLayout> </TableRow> <TableRow> <RelativeLayout android:id="@+id/customView_secondRow" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/customView_time" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:padding="2px" android:layout_alignParentLeft="true" /> <TextView android:id="@+id/customView_place" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="6" android:padding="2px" android:layout_toRightOf="@+id/customView_time" /> </RelativeLayout> </TableRow> </TableLayout> <TextView android:id="@+id/customView_seats" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="5px" android:layout_weight="1" android:layout_alignParentRight="true" android:layout_centerInParent="true" /> </RelativeLayout> Setter veldig pris på hjelp, vært fast på dette problemet i hele dag. Lenke til kommentar
quantum Skrevet 24. januar 2011 Del Skrevet 24. januar 2011 Klarer ikke å se hva som har blitt gjort feil selv. de to første klassen mangler ihvertfall avsluttende "}" men om det er kompilatorfeil, runtimefeil, uventet resultat eller noe annet som er problemet ditt vet vi jo ikke ... Lenke til kommentar
Truls89 Skrevet 24. januar 2011 Forfatter Del Skrevet 24. januar 2011 mangel på "}" er bare sløv kopiering av klassene. Men applikasjonen vil altså ikke kjøre, crasher på oppstart. Ikke godt å si hva det er for noe... Lenke til kommentar
miXer Skrevet 24. januar 2011 Del Skrevet 24. januar 2011 (endret) Har du sett etter hvilken exception som blir kastet i logcat? Endret 24. januar 2011 av miXer Lenke til kommentar
sindrebn Skrevet 24. januar 2011 Del Skrevet 24. januar 2011 Hei, jeg tipper problemet ditt ligger på følgende linje i ShowList: date = new Date("20/01"); Såvidt meg bekjent kan du ikke sende en string bestående av bare dag og måned som parameter når du oppretter Date-objektet. Hvis du absolutt må bruke en string, er du nødt til å ha med årstall; date = new Date("20/01/11"); (kan dog være at du må skrive "01/20/11" - amerikansk datoformat) Forøvrig verdt å notere seg at denne konstruktøren er deprecated. Lenke til kommentar
Truls89 Skrevet 24. januar 2011 Forfatter Del Skrevet 24. januar 2011 Hei, jeg tipper problemet ditt ligger på følgende linje i ShowList: date = new Date("20/01"); Såvidt meg bekjent kan du ikke sende en string bestående av bare dag og måned som parameter når du oppretter Date-objektet. Hvis du absolutt må bruke en string, er du nødt til å ha med årstall; date = new Date("20/01/11"); (kan dog være at du må skrive "01/20/11" - amerikansk datoformat) Forøvrig verdt å notere seg at denne konstruktøren er deprecated. Er nok ikke der problemet ligger, prøvd med en tom liste også. Lenke til kommentar
sindrebn Skrevet 24. januar 2011 Del Skrevet 24. januar 2011 Ved å fikse parameteren til Date-objektet sluttet programmet å krasje, men jeg ser at ListViewen fortsatt var tomt selv etter kall på populateList(). En måte å fikse det på er å gjøre om Activityen til en ListActivity på følgende måte: public class ShowList extends ListActivity { private ShowItemAdapter aa; private ArrayList<Show> list; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); list = new ArrayList<Show>(); aa = new ShowItemAdapter(this, R.layout.custom_row, list); setListAdapter(aa); populateList(); } private class ShowItemAdapter extends ArrayAdapter<Show> { public ShowItemAdapter(Context context, int textViewResourceId, ArrayList<Show> items) { super(context, textViewResourceId, items); } public View getView(int position, View convertView, ViewGroup parent) { View showView = convertView; if (showView == null) { LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); showView = vi.inflate(R.layout.custom_row, null); } Show show = getItem(position); if (show != null) { TextView nameView = (TextView)showView.findViewById(R.id.customView_name); TextView dateView = (TextView)showView.findViewById(R.id.customView_date); TextView seatsView =(TextView)showView.findViewById(R.id.customView_seats); TextView timeView = (TextView)showView.findViewById(R.id.customView_time); TextView placeView = (TextView)showView.findViewById(R.id.customView_place); SimpleDateFormat sdf = new SimpleDateFormat("d/M"); nameView.setText(show.getName()); dateView.setText(sdf.format(show.getDate())); seatsView.setText(show.getSeats()); timeView.setText(show.getTime()); placeView.setText(show.getPlace()); } return showView; } } private void populateList() { Date date; date = new Date(); Show show1 = new Show(date , "ISTID 3", "271 stk", "19:00", "Edda Kino Edda 1, Haugesund"); list.add(show1); aa.notifyDataSetChanged(); } } Jeg flyttet ShowItemAdapter inn i ShowList for å slippe å bytte fane så ofte, men det er ingen sak å flytte ut igjen dersom du skulle foretrekke det main.xml kan da gjøres om til følgende: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ListView android:id="@android:id/list" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <TextView android:id="@android:id/empty" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Tom liste" /> </LinearLayout> custom_row.xml og Show.java er uforandret. Dette ble kjapt satt sammen, og det finnes sikkert mer elegante måter å gjøre det på, men det funker ihvertfall Lenke til kommentar
Truls89 Skrevet 25. januar 2011 Forfatter Del Skrevet 25. januar 2011 Ved å fikse parameteren til Date-objektet sluttet programmet å krasje, men jeg ser at ListViewen fortsatt var tomt selv etter kall på populateList(). En måte å fikse det på er å gjøre om Activityen til en ListActivity på følgende måte: public class ShowList extends ListActivity { private ShowItemAdapter aa; private ArrayList<Show> list; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); list = new ArrayList<Show>(); aa = new ShowItemAdapter(this, R.layout.custom_row, list); setListAdapter(aa); populateList(); } private class ShowItemAdapter extends ArrayAdapter<Show> { public ShowItemAdapter(Context context, int textViewResourceId, ArrayList<Show> items) { super(context, textViewResourceId, items); } public View getView(int position, View convertView, ViewGroup parent) { View showView = convertView; if (showView == null) { LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); showView = vi.inflate(R.layout.custom_row, null); } Show show = getItem(position); if (show != null) { TextView nameView = (TextView)showView.findViewById(R.id.customView_name); TextView dateView = (TextView)showView.findViewById(R.id.customView_date); TextView seatsView =(TextView)showView.findViewById(R.id.customView_seats); TextView timeView = (TextView)showView.findViewById(R.id.customView_time); TextView placeView = (TextView)showView.findViewById(R.id.customView_place); SimpleDateFormat sdf = new SimpleDateFormat("d/M"); nameView.setText(show.getName()); dateView.setText(sdf.format(show.getDate())); seatsView.setText(show.getSeats()); timeView.setText(show.getTime()); placeView.setText(show.getPlace()); } return showView; } } private void populateList() { Date date; date = new Date(); Show show1 = new Show(date , "ISTID 3", "271 stk", "19:00", "Edda Kino Edda 1, Haugesund"); list.add(show1); aa.notifyDataSetChanged(); } } Jeg flyttet ShowItemAdapter inn i ShowList for å slippe å bytte fane så ofte, men det er ingen sak å flytte ut igjen dersom du skulle foretrekke det main.xml kan da gjøres om til følgende: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ListView android:id="@android:id/list" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <TextView android:id="@android:id/empty" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Tom liste" /> </LinearLayout> custom_row.xml og Show.java er uforandret. Dette ble kjapt satt sammen, og det finnes sikkert mer elegante måter å gjøre det på, men det funker ihvertfall Endringen av Activity til ListActivity funket utmerket. Hjertelig takk for hjelpen! Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå