Приветствия от greenhorn. Этот вопрос немного длинный, извините за это. Приложение для Android загружает xml в список, а затем, щелкнув любой элемент списка, я хочу передать некоторую информацию во вторую активность. СOnClickListener: Почему я не могу получить доступ к общедоступным методам объекта в ArrayAdapter? Любое обходное решение?
piesneLVdata.getItemAtPosition(position).toString()
А вот мой объект:
public class Piesen {
private String nazov_piesne;
private String text_piesne;
}
+ некоторые получают и устанавливают методы и переопределение ToString ...
я могу получить доступ к первому свойству объекта, и я могу используйте его во втором упражнении. Я думаю, это потому, что я переопределен метод в моем определении объекта:
@Override
public String toString() {
return nazov_piesne;
}
Однако я не в состоянии получить доступ ко второму свойство моего объекта. Пытались это:
piesneLVdata.getItemAtPosition(position).getTextPiesne()
но getTextPiesne(), кажется, не достижима - то почему "ToString()" достижим? Информация есть, я могу получить доступ к нему вне onClickListener с такой формулировкой:
zoznamPiesni.get(position).getText_piesne().toString();
, но когда я пытаюсь использовать его в onClickListener я получаю ошибку:
Error:(64, 45) error: local variable zoznamPiesni is accessed from within inner class; needs to be declared final
Но тогда, когда я объявить его окончательным, я не могу загрузить в него XML-файл. Я чувствую себя официально закрытым. Возможно, я должен перепроектировать метод toString(), чтобы содержать массив обоих свойств моего объекта. Не могли бы вы указать мне правильное направление? Заранее большое спасибо.
Конкретно, вот моя деятельность: общественный класс ListActivity расширяет AppCompatActivity {
ListView piesneLVdata;
Toolbar nadpis;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);
nadpis = (Toolbar) findViewById(R.id.toolbar);
nadpis.setTitle(getResources().getString(R.string.nadpis));
piesneLVdata = (ListView) findViewById(R.id.piesneLVgui);
List<Piesen> zoznamPiesni = null;
try {
XMLPullParserHandler parser = new XMLPullParserHandler();
zoznamPiesni = parser.parse(getAssets().open("piesne.xml"));
//sort the collection piesne alphabetically a-z
Collections.sort(zoznamPiesni, new Comparator<Piesen>() {
@Override
public int compare(Piesen a1, Piesen a2) {
// String implements Comparable
return (a1.getNazov_piesne().toString()).compareTo(a2.getNazov_piesne().toString());
}
});
ArrayAdapter<Piesen> adapter = new ArrayAdapter<Piesen>(this,android.R.layout.simple_list_item_1,zoznamPiesni);
piesneLVdata.setAdapter(adapter);
}catch (IOException e) {
e.printStackTrace();
}
piesneLVdata.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent slovaIntent = new Intent(ListActivity.this, SongActivity.class);
Bundle balik = new Bundle();
balik.putString("NAZOV", piesneLVdata.getItemAtPosition(position).toString());
//balik.putString("TEXT", piesneLVdata.getItemAtPosition(position).getTextPiesne());
// balik.putString("TEXT", zoznamPiesni.get(position).getText_piesne().toString());
slovaIntent.putExtras(balik);
startActivity(slovaIntent);
}
});
}
Невероятно! Это действительно сработало! Я потратил несколько часов на исследование этого. Мой самый большой Спасибо вам, ваш ответ был действительно полезен. – sujanko