Ich komme nach langer Zeit wieder zu Android und ich bin ein bisschen mit einem Problem fest.
Die App besteht aus einer Liste von Layouts, die jeweils von einem Modell über den Adapter unterstützt werden.
Jedes Layout hat mehrere Ansichten, von denen einer ein Spinner ist.
Ich möchte die Daten im Adapter ändern, wenn Sie den Wert des Drehfelds ändern, aber ich weiß nicht, wie Sie auf das Objekt im Adapter verweisen.Zugriff auf ein Adapter-Objekt aus einer Ansicht in der ListView
public class MainActivity extends AppCompatActivity {
ArrayList<Troop> values = new ArrayList<Troop>();
MySimpleArrayAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
values.add(new Troop());
final ListView listView =(ListView) findViewById(R.id.listview);
adapter = new MySimpleArrayAdapter(
this,
values);
listView.setAdapter(adapter);
}
public class Troop {
private String weapon;
private int bs;
private int total_modifier;
public Troop() {
}
public int getBs() {
return bs;
}
public void setBs(int bs) {
this.bs = bs;
}
}
public class MySimpleArrayAdapter extends ArrayAdapter {
private final Context context;
private ArrayList<Troop> troopers;
private String[] possible_bs = new String[] {"10", "11", "12", "13", "15", "16"};
public MySimpleArrayAdapter(Context context, ArrayList<Troop> values) {
super(context, -1, values);
this.context = context;
this.troopers = values;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.rowlayout, parent, false);
Spinner bs_spinner = rowView.findViewById(R.id.bs_spinner);
ArrayAdapter<String> bs_adapter = new ArrayAdapter<String>(
context,
android.R.layout.simple_spinner_dropdown_item,
possible_bs);
bs_spinner.setOnItemSelectedListener(new CustomOnItemSelectedListener());
bs_spinner.setAdapter(bs_adapter);
return rowView;
}
}
public class CustomOnItemSelectedListener implements AdapterView.OnItemSelectedListener {
public void onItemSelected(AdapterView<?> parent, View view, int pos,long id) {
// I want to call getBs on the Trooper correspoding to this view here
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
}
}
Sie sollten 'erweitert ArrayAdapter' –
Vielen Dank für Ihre Antwort. Die Frage ist, wie man von der onItemSelected-Methode auf den Adapter zugreift. –
Es ist ein Kommentar, keine Antwort;) Welcher Adapter? –