Zugriff auf Views von einer anderen Klasse

  • Antworten:4
Florian Schaumann
  • Forum-Beiträge: 3

19.01.2012, 13:37:36 via Website

Problem via Einbettung der Listener-Klasse gelöst, danke ;)

— geändert am 19.01.2012, 14:34:27

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

19.01.2012, 13:53:44 via Website

Dennoch ein böses Faul:

if ( str == "CAD")

Strings vergleicht man mittels equals:

if("CAD".equals(str))
{
doSomething());
}


nebenbei hat die Umkehrung den Charm das es NullPointerExceptions vermeidet...


Ich denke du brauch ein Mapping von dem Namen des String auf die ResourceID:

final Map<String,Integer> resourceMapper = new HashMap<String,Integer>();

resourceMapper.put("CAD",R.id.deinenView));
resourceMapper.put("3D",R.id.deinenView2));
resourceMapper.put("Maya",R.id.deinenView3));




Im MyOnSelectedItemListener holst du dir die ID des View und kannst diesen
dann direkt mittels findViewById(id) dir besorgen um damit zu arbeiten.


hth,
Mac

— geändert am 19.01.2012, 13:58:26

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Florian Schaumann
  • Forum-Beiträge: 3

19.01.2012, 14:02:40 via Website

Mit dem Equals hast du natürlich recht.

Das findviewbyid steht mir jedoch nicht zur verfügung hier. Vielleicht weil es keine "extendsActivity" Klasse ist? Habe es schon damit versucht :/

Edit:

Nach ein wenig herumprobieren ein neues Problem:


Ich habe einem Spinner einen Listener zugewiesen den ich folgendermaßen implementiert habe:

1public class MyOnSelectedItemListener implements OnItemSelectedListener {
2
3public void onItemSelected(AdapterView<?> parent, View view, int pos,long id) {
4// TODO Auto-generated method stub
5
6String str = null;
7Context context = parent.getContext();
8str = parent.getItemAtPosition(pos).toString();
9
10EditText CurrName = (EditText) view.findViewById(R.id.calc_edit_summary);
11
12Toast toast = Toast.makeText(context, str, Toast.LENGTH_LONG);
13toast.show();
14
15if (str.equals("CAD")) {
16CurrName.setText("Funktioniert CAD");
17}
18
19}
20
21public void onNothingSelected(AdapterView<?> arg0) {
22// TODO Auto-generated method stub
23
24}
25
26}

Mein Problem ist nun, daß die App abstürzt wenn ich CAD im Spinner auswähle :(

Habe ich einen offensichtlichen Fehler gemacht?

— geändert am 19.01.2012, 14:18:15

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

19.01.2012, 14:46:59 via Website

Kaffesatz kann ich nicht lesen, ohne Stacktrace kann das hier keiner! Post die Exception, ich tippe mal auf eine NullPointerException.

Du hast noch ein generelles Problem, sei dir im klaren wann du welche Information brauchst. Dein Listener soll lediglich herausfinden was geklickt wurde.
Er kann das ergebniss evtl auch wieder zurückgeben indem er eine Methode in der Activity aufruft.


public ..onItemSelected ...



acticity.itemSelected(nameOfItem);


In der Actitity muss du dann in dein mapping schauen, das hast du in der onCreate erzeugt und kannst nun dann entsprechend damit arbeiten!


public void itemSelected(final String aName)
{
if(resourceMapping.containsKey(aName))
{
final View view = resourceMapping.get(aName);
...mach was mit dem View ...

}

}

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten