S
SaschaHa²
App-Anbieter (In-App)
- 38
Hallo Liebe Community,
ich habe zwei kleine Probleme, für die ich bisher keine verständliche Lösung gefunden habe. Und zwar:
1. Wie kann ich mit jedem ListView-Eintrag eine bestimmte Methode oder ein Layout aufrufen? Und zwar möchte ich die ListView als Menü für eine App benutzen, bei der bei jedem Eintrag ein bestimmtes Layout aufgerufen wird. Bisher habe ich das mit Buttons und onClick-Methoden gemacht, aber das scheint hier nicht so leicht zu funktionieren.
2. Und als nächstes würde ich meine Liste gerne nach Namen sortieren. Da ich am Ende Strings aus der Strings.xml verwende, konnten mir andere Tutorials auch nicht wirklich weiterhelfen.
Hier erstmal ein provisorischer Code eines Tutorials, an dem ich mich orientiere:
Hier die MainActivity.java
public class MainActivity extends Activity {
private List<Car> myCars = new ArrayList<Car>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
populateCarList();
populateListView();
registerClickCallback();
}
private void populateCarList() {
myCars.add(new Car("Ford", 1998, R.drawable.help, "Needing work"));
myCars.add(new Car("Toyota", 1994, R.drawable.heart, "Lovable"));
myCars.add(new Car("Honda", 1999, R.drawable.fish, "Wet"));
myCars.add(new Car("Porche", 2005, R.drawable.lightning, "Fast!"));
myCars.add(new Car("Jeep", 2004, R.drawable.star, "Awesome"));
myCars.add(new Car("Rust-Bucket", 2010, R.drawable.bug, "Not *very* good"));
myCars.add(new Car("Moon Lander", 1971, R.drawable.up, "Out of this world"));
}
private void populateListView() {
ArrayAdapter<Car> adapter = new MyListAdapter();
ListView list = (ListView) findViewById(R.id.carsListView);
list.setAdapter(adapter);
}
private void registerClickCallback() {
ListView list = (ListView) findViewById(R.id.carsListView);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View viewClicked,
int position, long id) {
Car clickedCar = myCars.get(position);
String message = "You clicked position " + position
+ " Which is car make " + clickedCar.getMake();
Toast.makeText(MainActivity.this, message, Toast.LENGTH_LONG).show();
}
});
}
private class MyListAdapter extends ArrayAdapter<Car> {
public MyListAdapter() {
super(MainActivity.this, R.layout.item_view, myCars);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// Make sure we have a view to work with (may have been given null)
View itemView = convertView;
if (itemView == null) {
itemView = getLayoutInflater().inflate(R.layout.item_view, parent, false);
}
// Find the car to work with.
Car currentCar = myCars.get(position);
// Fill the view
ImageView imageView = (ImageView)itemView.findViewById(R.id.item_icon);
imageView.setImageResource(currentCar.getIconID());
// Make:
TextView makeText = (TextView) itemView.findViewById(R.id.item_txtMake);
makeText.setText(currentCar.getMake());
// Year:
TextView yearText = (TextView) itemView.findViewById(R.id.item_txtYear);
yearText.setText("" + currentCar.getYear());
// Condition:
TextView condionText = (TextView) itemView.findViewById(R.id.item_txtCondition);
condionText.setText(currentCar.getCondition());
return itemView;
Und hier die Car.java
public class Car {
private String make;
private int year;
private int iconID;
private String condition;
public Car(String make, int year, int iconID, String condition) {
super();
this.make = make;
this.year = year;
this.iconID = iconID;
this.condition = condition;
}
public String getMake() {
return make;
}
public int getYear() {
return year;
}
public int getIconID() {
return iconID;
}
public String getCondition() {
return condition;
Wie gesagt: Das ist erstmal nur der Code eines Tutorials. Die Liste und die einzelnen Elemente werden verändert, vom Aufbau her möchte ich es aber ähnlich haben. Beim ListView-Eintrag für - sagen wir mal - einen BMI-Rechner möchte ich halt das entsprechende BMI-Layout aufrufen, das ich vorher in einer xml erstellt habe. Und so weiter.
Ich wäre für Hilfe echt dankbar, weil ich einfach nicht weiterkomme. Da ich ein totaler Neueisteiger bin, habt bitte etwas Nachsicht, wenn meine Fragen etwas doof erscheinen
Am liebsten hätte ich in den Zeilen, wo ich die Werte meiner ListView eintrage, auch den Namen der Methode/des Layouts, die/das aufgerufen wird, also zum Beispiel hier hinter:
myCars.add(new Car("Ford", 1998, R.drawable.help, "Needing work"));
LG und vielen Dank schonmal!
Sascha
ich habe zwei kleine Probleme, für die ich bisher keine verständliche Lösung gefunden habe. Und zwar:
1. Wie kann ich mit jedem ListView-Eintrag eine bestimmte Methode oder ein Layout aufrufen? Und zwar möchte ich die ListView als Menü für eine App benutzen, bei der bei jedem Eintrag ein bestimmtes Layout aufgerufen wird. Bisher habe ich das mit Buttons und onClick-Methoden gemacht, aber das scheint hier nicht so leicht zu funktionieren.
2. Und als nächstes würde ich meine Liste gerne nach Namen sortieren. Da ich am Ende Strings aus der Strings.xml verwende, konnten mir andere Tutorials auch nicht wirklich weiterhelfen.
Hier erstmal ein provisorischer Code eines Tutorials, an dem ich mich orientiere:
Hier die MainActivity.java
public class MainActivity extends Activity {
private List<Car> myCars = new ArrayList<Car>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
populateCarList();
populateListView();
registerClickCallback();
}
private void populateCarList() {
myCars.add(new Car("Ford", 1998, R.drawable.help, "Needing work"));
myCars.add(new Car("Toyota", 1994, R.drawable.heart, "Lovable"));
myCars.add(new Car("Honda", 1999, R.drawable.fish, "Wet"));
myCars.add(new Car("Porche", 2005, R.drawable.lightning, "Fast!"));
myCars.add(new Car("Jeep", 2004, R.drawable.star, "Awesome"));
myCars.add(new Car("Rust-Bucket", 2010, R.drawable.bug, "Not *very* good"));
myCars.add(new Car("Moon Lander", 1971, R.drawable.up, "Out of this world"));
}
private void populateListView() {
ArrayAdapter<Car> adapter = new MyListAdapter();
ListView list = (ListView) findViewById(R.id.carsListView);
list.setAdapter(adapter);
}
private void registerClickCallback() {
ListView list = (ListView) findViewById(R.id.carsListView);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View viewClicked,
int position, long id) {
Car clickedCar = myCars.get(position);
String message = "You clicked position " + position
+ " Which is car make " + clickedCar.getMake();
Toast.makeText(MainActivity.this, message, Toast.LENGTH_LONG).show();
}
});
}
private class MyListAdapter extends ArrayAdapter<Car> {
public MyListAdapter() {
super(MainActivity.this, R.layout.item_view, myCars);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// Make sure we have a view to work with (may have been given null)
View itemView = convertView;
if (itemView == null) {
itemView = getLayoutInflater().inflate(R.layout.item_view, parent, false);
}
// Find the car to work with.
Car currentCar = myCars.get(position);
// Fill the view
ImageView imageView = (ImageView)itemView.findViewById(R.id.item_icon);
imageView.setImageResource(currentCar.getIconID());
// Make:
TextView makeText = (TextView) itemView.findViewById(R.id.item_txtMake);
makeText.setText(currentCar.getMake());
// Year:
TextView yearText = (TextView) itemView.findViewById(R.id.item_txtYear);
yearText.setText("" + currentCar.getYear());
// Condition:
TextView condionText = (TextView) itemView.findViewById(R.id.item_txtCondition);
condionText.setText(currentCar.getCondition());
return itemView;
Und hier die Car.java
public class Car {
private String make;
private int year;
private int iconID;
private String condition;
public Car(String make, int year, int iconID, String condition) {
super();
this.make = make;
this.year = year;
this.iconID = iconID;
this.condition = condition;
}
public String getMake() {
return make;
}
public int getYear() {
return year;
}
public int getIconID() {
return iconID;
}
public String getCondition() {
return condition;
Wie gesagt: Das ist erstmal nur der Code eines Tutorials. Die Liste und die einzelnen Elemente werden verändert, vom Aufbau her möchte ich es aber ähnlich haben. Beim ListView-Eintrag für - sagen wir mal - einen BMI-Rechner möchte ich halt das entsprechende BMI-Layout aufrufen, das ich vorher in einer xml erstellt habe. Und so weiter.
Ich wäre für Hilfe echt dankbar, weil ich einfach nicht weiterkomme. Da ich ein totaler Neueisteiger bin, habt bitte etwas Nachsicht, wenn meine Fragen etwas doof erscheinen

Am liebsten hätte ich in den Zeilen, wo ich die Werte meiner ListView eintrage, auch den Namen der Methode/des Layouts, die/das aufgerufen wird, also zum Beispiel hier hinter:
myCars.add(new Car("Ford", 1998, R.drawable.help, "Needing work"));
LG und vielen Dank schonmal!
Sascha