Da gehe ich mit. - Aber ich finde es eben eine gute Phílosophie, wenn man versucht modular zu arbeiten und zusammenhängende Dinge in eine Komponente zu stecken, welche dann einfach einzusetzen ist, ohne das man groß Wissen über die internen Details benötigt. - Dies hilft hinsichtlich code reuse.
Ich werde es daher trotzdem mal mit dem ViewFlipper versuchen - mal schauen, wie weit ich komme, ohne zu viel Zeit dafür zu verschwenden...
Nein, dass will man nicht. Dem stimme ich zu. - Ich finde aber auch JavaScript nicht so toll...
Naja, die Menüs bestehen ja nur aus ein paar Strings. - Nehmen wir mal insgesamt 1000 Strings mit maximal 50 Zeichen als Obergrenze an, dann wären wir bei gerade mal 100kB an Daten. Und der GC sollte doch mit 20...50 Objekten klar kommen.
Ich hätte da jetzt mehr bedenken bei den Animationen - die sind sicher Hardwarebeschleunigt.
Wenn ich jetzt einfach bloß versuche die Views absolut hin- und herzuschieben, könnte es bei einem ARM evtl. knapp werden. (Zumal ich keine Ahnung habe, wie man das unter Android überhaupt machen kann - bei Swing muss man es ja mit invokeLater() im EDT machen.)
Vielen Dank für das Beispiel!
Ich habe es an mein Test-Projekt angepasst (ich arbeite ja ohne XML-Layout): habe sogar die Exceptions weg bekommen - aber es werden auch keine Daten angezeigt. Es entsteht nur ein Rechteckt, welches man erst sieht, wenn man den AVD aus einem sehr spitzen Winkel betrachtet.
Ich bin bei dem Prinzip auch noch nicht ganz durchgestiegen: Warum muss ich im Adapter TextViews anlegen? - Werden dann immer jeweils zwei Labels pro Listeneintrag erstellt? Und ist der Preis dann auch automatisch rechtsbündig?
Ich habe es wie folgt geändert:
[code=Java]package common.view.menu;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
public class ItemAdapter extends ArrayAdapter<String> {
private List<String> items;
private LayoutInflater inflater;
private Context m_context = null;
public ItemAdapter(Context context, int textViewResourceId, List<String> objects) {
super(context, textViewResourceId, objects);
this.m_context = context;
this.items = objects;
this.inflater = LayoutInflater.from(context);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null) {
convertView = new View(m_context); // inflater.inflate(R.layout.purchase_list_item, null);
}
final TextView lblName = new TextView(m_context); //(TextView)convertView.findViewById(R.id.lblName);
final TextView lblPrice = new TextView(m_context); //(TextView)convertView.findViewById(R.id.lblPrice);
final String item = getItem(position);
lblName.setText(item.toString());
lblPrice.setText(getPriceTag(item));
return convertView;
}
private String getPriceTag(final String item) {
return item; //Utils.format(getContext(), R.string.fmtStrPrice, (float)item.getPriceInCent() / 100f);
}
@Override
public int getCount() {
return items.size();
}
@Override
public void add(String object) {
items.add(object);
}
@Override
public String getItem(int position) {
return items.get(position);
}
@Override
public void clear() {
items.clear();
}
public void addItemAt(String item, int pos) {
items.add(pos, item);
}
public List<String> getAllItems() {
return items;
}
}
[/code]
und das ist meine TestView, welche die Liste enthalten soll:
[code=Java]package common.view.menu;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class MenuView extends LinearLayout {
static final String[] COUNTRIES = new String[] {
"Afghanistan", "Albania", "Algeria", "American Samoa", "Andorra",
"Angola", "Anguilla", "Antarctica", "Antigua and Barbuda", "Argentina",
"Armenia", "Aruba", "Australia", "Austria", "Azerbaijan",
"Bahrain", "Bangladesh", "Barbados", "Belarus", "Belgium",
"Belize", "Benin", "Bermuda", "Bhutan", "Bolivia",
"Bosnia and Herzegovina", "Botswana", "Bouvet Island", "Brazil", "British Indian Ocean Territory",
"British Virgin Islands", "Brunei", "Bulgaria", "Burkina Faso", "Burundi",
"Cote d'Ivoire", "Cambodia", "Cameroon", "Canada", "Cape Verde",
"Cayman Islands", "Central African Republic", "Chad", "Chile", "China",
"Christmas Island", "Cocos (Keeling) Islands", "Colombia", "Comoros", "Congo",
"Cook Islands", "Costa Rica", "Croatia", "Cuba", "Cyprus", "Czech Republic",
"Democratic Republic of the Congo", "Denmark", "Djibouti", "Dominica", "Dominican Republic",
"East Timor", "Ecuador", "Egypt", "El Salvador", "Equatorial Guinea", "Eritrea",
"Estonia", "Ethiopia", "Faeroe Islands", "Falkland Islands", "Fiji", "Finland",
"Former Yugoslav Republic of Macedonia", "France", "French Guiana", "French Polynesia",
"French Southern Territories", "Gabon", "Georgia", "Germany", "Ghana", "Gibraltar",
"Greece", "Greenland", "Grenada", "Guadeloupe", "Guam", "Guatemala", "Guinea", "Guinea-Bissau",
"Guyana", "Haiti", "Heard Island and McDonald Islands", "Honduras", "Hong Kong", "Hungary",
"Iceland", "India", "Indonesia", "Iran", "Iraq", "Ireland", "Israel", "Italy", "Jamaica",
"Japan", "Jordan", "Kazakhstan", "Kenya", "Kiribati", "Kuwait", "Kyrgyzstan", "Laos",
"Latvia", "Lebanon", "Lesotho", "Liberia", "Libya", "Liechtenstein", "Lithuania", "Luxembourg",
"Macau", "Madagascar", "Malawi", "Malaysia", "Maldives", "Mali", "Malta", "Marshall Islands",
"Martinique", "Mauritania", "Mauritius", "Mayotte", "Mexico", "Micronesia", "Moldova",
"Monaco", "Mongolia", "Montserrat", "Morocco", "Mozambique", "Myanmar", "Namibia",
"Nauru", "Nepal", "Netherlands", "Netherlands Antilles", "New Caledonia", "New Zealand",
"Nicaragua", "Niger", "Nigeria", "Niue", "Norfolk Island", "North Korea", "Northern Marianas",
"Norway", "Oman", "Pakistan", "Palau", "Panama", "Papua New Guinea", "Paraguay", "Peru",
"Philippines", "Pitcairn Islands", "Poland", "Portugal", "Puerto Rico", "Qatar",
"Reunion", "Romania", "Russia", "Rwanda", "Sqo Tome and Principe", "Saint Helena",
"Saint Kitts and Nevis", "Saint Lucia", "Saint Pierre and Miquelon",
"Saint Vincent and the Grenadines", "Samoa", "San Marino", "Saudi Arabia", "Senegal",
"Seychelles", "Sierra Leone", "Singapore", "Slovakia", "Slovenia", "Solomon Islands",
"Somalia", "South Africa", "South Georgia and the South Sandwich Islands", "South Korea",
"Spain", "Sri Lanka", "Sudan", "Suriname", "Svalbard and Jan Mayen", "Swaziland", "Sweden",
"Switzerland", "Syria", "Taiwan", "Tajikistan", "Tanzania", "Thailand", "The Bahamas",
"The Gambia", "Togo", "Tokelau", "Tonga", "Trinidad and Tobago", "Tunisia", "Turkey",
"Turkmenistan", "Turks and Caicos Islands", "Tuvalu", "Virgin Islands", "Uganda",
"Ukraine", "United Arab Emirates", "United Kingdom",
"United States", "United States Minor Outlying Islands", "Uruguay", "Uzbekistan",
"Vanuatu", "Vatican City", "Venezuela", "Vietnam", "Wallis and Futuna", "Western Sahara",
"Yemen", "Yugoslavia", "Zambia", "Zimbabwe"
};
public MenuView(final Context context) {
super(context);
TextView text = new TextView(context);
text.setText("Root!");
this.addView(text);
List<String> countries = new ArrayList<String>();
for(String country : COUNTRIES) {
countries.add(country);
}
ListView list = new ListView(context);
list.setAdapter( (ListAdapter)new ItemAdapter(context, 0, countries) );
list.setOnItemClickListener(new OnItemClickListener() {
// When clicked, show a toast with the TextView text
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(context, ((TextView) view).getText(), Toast.LENGTH_SHORT).show();
}
});
this.addView(list);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
Log.e("SWIPED", "onLayout : " + Boolean.toString(changed));
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
super.onInterceptTouchEvent(event);
Log.e("SWIPED", "onInterceptTouchEvent : " + event.getAction());
return false;
}
}
[/code]
Könntest du mir bitte doch noch einmal unter die Arme greifen? Vielen Dank.