来自新手的问候。这个问题有点长,对不起。 我的Android应用程序将xml加载到listview,然后在单击任何listview项目后,我想将一些信息传递给第二个活动。与
piesneLVdata.getItemAtPosition(position).toString()
这是我的目标:
public class Piesen {
private String nazov_piesne;
private String text_piesne;
}
+一些get和set方法以及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
但是,当我宣布它为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 :(得分:0)
问题在于
piesneLVdata.getItemAtPosition(position)
返回Piesen
作为Object
处理。 Object
有toString方法,所以你可以调用那个被Piesen.class
覆盖的方法。
您需要的只是将对象转换为Piesed
,如下所示:
((Piesen)piesneLVdata.getItemAtPosition(position)).getTextPiesne()