2017-01-21 3 views
0

Приветствия от 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); 
      } 
     }); 
} 

ответ

0

Проблема заключается в том, что

piesneLVdata.getItemAtPosition(position) 

Piesen Вернуть трактоваться как Object. Object имеет метод toString, поэтому yo ucan вызывает этот метод, который переопределяется Piesen.class.

Что вам нужно просто отдать свой объект к Piesed нравится следующим образом:

((Piesen)piesneLVdata.getItemAtPosition(position)).getTextPiesne() 
+0

Невероятно! Это действительно сработало! Я потратил несколько часов на исследование этого. Мой самый большой Спасибо вам, ваш ответ был действительно полезен. – sujanko

 Смежные вопросы

  • Нет связанных вопросов^_^