我有一个类,其中包含变量“artist”的getter和setter:
类别:
public void setArtist(String artist) {
this.artist = artist;
}
public String getArtist() {
return artist;
}
我想从像这样的活动中调用setArtist:
活动1:
Playlist.setArtist(someString)
但是eclipse告诉我,我需要将setArtist更改为static。我使用setter的重点是避免使用任何静态引用。我做错了什么,还是有其他办法来实现这个目标?
答案 0 :(得分:6)
这完全取决于你想要你的对象的位置和时间。你可以这样做:
class Artist implements Serializable{
public static final String EXTRA = "com.your.package.ARTIST_EXTRA";
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
活动1:
public void onCreate(Bundle savedInstance){
// ....
Artist artist = new Artist();
artist.setName("Rolf");
Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra(Artist.EXTRA, artist);
startActivity(intent);
}
活动2:
然后,您可以在第二个活动中引用您的艺术家:
public void onCreate(Bundle savedInstance){
// ....
Artist artist = (Artist) getIntent().getSerializableExtra(Artist.EXTRA);
Log.d("YourApp", "I have the artist! "+ artist.getName());
}
观察您正在序列化的内容,因为您无法序列化某些对象。
另一种方法是使用扩展Application的类并在其中保留引用,然后可以从任何Activity上下文中检索它。
答案 1 :(得分:3)
你不能假设其他活动会在内存中,所以这是错误的做法。我会阅读一些Android活动以及如何使用它们。
http://developer.android.com/guide/topics/fundamentals/activities.html
答案 2 :(得分:1)
请创建Playlist
的对象,然后设置变量。
Playlist mObjPlaylist= new Playlist();
mObjPlaylist.setArtist(someString);
答案 3 :(得分:0)
您处理活动的方式不正确。
如果您需要在两个Activity中使用一些常用数据,那么您可以使用公共类来操作它,而不是将它放在Activity中。如果您想要从活动中启动另一个活动时传递一些数据,您可以传递它通过额外的意图。
class PlayList{
private static PlayList self=null;
private string artist;
public static PlayList getInstance(){
if(self==null){
self=new PlayList();
}
return self;
}
public void setArtist(String artist) {
this.artist = artist;
}
public String getArtist() {
return artist;
}
}
答案 4 :(得分:0)
如果要访问像A.show()这样的方法,show()方法应该是静态方法,因为coz静态方法不需要可访问的对象。 一种解决方案是将这些getter和setter作为静态方法,并在您现在访问它时访问它。 另一个解决方案是使用Singleton模式,所以在这种情况下你不需要将这些方法设置为静态,你只需要获取该类的单例对象并访问这些方法,如下所示:
PlayList.getInstance().setArtist();