0

我有一个包含变量“艺术家”的getter和setter的类:

班级:

public void setArtist(String artist) {
    this.artist = artist;
}

public String getArtist() {
    return artist;
}

我想从这样的活动中调用 setArtist:

活动一:

Playlist.setArtist(someString)

但是 eclipse 告诉我我需要将 setArtist 更改为静态。我使用 setter 的全部目的是避免有任何静态引用。我做错了什么,还是有其他方法可以做到这一点?

4

5 回答 5

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;
  }    
}

活动一:

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);
}

活动二:

然后,您可以在第二个活动中引用您的艺术家:

public void onCreate(Bundle savedInstance){
   // ....
   Artist artist = (Artist) getIntent().getSerializableExtra(Artist.EXTRA);

   Log.d("YourApp", "I have the artist! "+ artist.getName());

} 

注意您正在序列化的内容,因为您无法序列化某些对象。

另一种方法是拥有一个扩展 Application 并在其中保留引用的类,然后您可以从任何 Activity 上下文中检索它。

于 2012-06-06T11:51:57.590 回答
3

您不能假设其他活动将在内存中,因此这是错误的做法。我会阅读一些 android 活动以及如何使用它们。

http://developer.android.com/guide/topics/fundamentals/activities.html

于 2012-06-06T11:47:00.560 回答
1

请制作一个对象Playlist然后设置变量。

Playlist mObjPlaylist= new Playlist();
mObjPlaylist.setArtist(someString);
于 2012-06-06T11:46:35.090 回答
0

如果你想访问像 A.show() 这样的方法,show() 方法应该是一个静态方法,因为静态方法不需要对象是可访问的。一种解决方案是将这些 getter 和 setter 设置为静态方法,并在您现在访问它时访问它。另一种解决方案是使用单例模式,因此在这种情况下,您不需要将这些方法设为静态,您只需要获取该类的单例对象并像这样访问这些方法:

PlayList.getInstance().setArtist();
于 2012-06-06T11:50:21.370 回答
0

你处理活动的方式不是正确的方式。

如果您需要在两个 Activity 中使用一些通用数据,那么您可以通过使用通用类来操作它,而不是将其放在 Activity 中。此外,如果您想在从 Activity 启动另一个 Activity 时传递一些数据,您可以通过 Intent Extra 传递它.

    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;
            }
        }
于 2012-06-06T11:48:26.267 回答