从另一个活动获取和设置变量

时间:2012-06-06 11:43:51

标签: android getter-setter

我有一个类,其中包含变量“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的重点是避免使用任何静态引用。我做错了什么,还是有其他办法来实现这个目标?

5 个答案:

答案 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();