我在Eclipse中创建一个程序到Android,我遇到了问题。我有这个课程,我向艺术家展示。在onClick方法中,我想发送所点击的列表项的“值”。
...public class ArtistActivity extends ListActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.listview);
String[] artists = getResources().getStringArray(R.array.artists_array);
setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, artists));
ListView lv = getListView();
lv.setTextFilterEnabled(true);
lv.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id)
{
StringActivity sA = new StringActivity();
sA.setArtist(((TextView) v).getText().toString());
String asd = sA.getArtist();
//Toast.makeText(getApplicationContext(), asd/*((TextView) v).getText()*/, Toast.LENGTH_SHORT).show();
Intent i = new Intent().setClass(getApplicationContext(), AlbumActivity.class);
startActivity(i);
}
});
}}
当我使用Toast进行onClick时,它会显示已挑选的项目,但在其他类中则不会。以下是我存储值的代码:
public class StringActivity {
private String artist="";
public String getArtist() {
return(artist);
}
public void setArtist(String artist) {
this.artist=artist;
}
public String toString() {
return(getArtist());
}}
这是另一个应该显示值的类:
public class AlbumActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
StringActivity sA = new StringActivity();
String asd = sA.getArtist();
TextView textview = new TextView(this);
textview.setText("Hello " + asd + " World!");
setContentView(textview);
}}
hello world只是因为看到textview没有任何问题。也许问题是它不刷新(它从程序启动时保持不变 - 因为当我给StringActivity类中的艺术家字符串赋值然后它显示,但当我点击一个项目时它保持相同)还是有另一个问题? 谢谢!
答案 0 :(得分:4)
您正在创建StringActivity
的新实例,然后使用getArtist()
获取值。它返回空字符串,因为该实例是本地的,并且尚未设置为其他任何内容。
不幸的是我没有做任何Android开发,所以我不知道你应该如何传递数据。也许可以使用作为参数传递的Bundle
来完成,或者可能有其他方式。我想如果您搜索Android文档和示例,应该很容易找到。
答案 1 :(得分:3)
您在StringActivity
侦听器中创建的onClick
仅在侦听器内可见,而不在您的第二个活动中可见!您必须使用Intent.putExtra()
将一些额外内容添加到Intent中,然后在第二个活动中使用Intent.getExtras()
来恢复它们。
所以将onClick更改为:
public void onItemClick(AdapterView<?> parent, View v, int position, long id)
{
String artist = ((TextView) v).getText().toString();
Intent i = new Intent().setClass(ArtistActivity.this, AlbumActivity.class);
i.putExtra("artist", artist);
startActivity(i);
}
在第二个活动的onCreate中你可以做到:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle extras = getIntent().getExtras();
String asd = extras.getString("artist");
TextView textview = new TextView(this);
textview.setText("Hello " + asd + " World!");
setContentView(textview);
}