2011-04-12 54 views
0

我在Eclipse中将程序制作为Android,并且出现问题。我有这个课,让我看看艺术家。在onClick方法中,我想发送被点击的listitem的“值”。变量的值不显示在其他类中

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

Inside onClick当我用Toast做的时候,它显示选择的项目,但在其他类别不。下面是代码,我存储值:

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

问候世界上还有仅仅因为一看就知道有什么与textview错误。也许问题在于它不会刷新(它从程序启动时保持不变 - 因为当我为StringActivity类中的艺术家字符串赋值时,它会显示,但是当我点击一个项目时它将保留相同)还是存在另一个问题? 谢谢!

回答

3

您在onClick侦听器中创建的StringActivity只在侦听器中可见,而不在第二个活动中可见!您必须使用Intent.putExtra()将一些额外内容推送到意图中,然后在第二个活动中使用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); 
} 
+0

以下检查我的回答很棒!非常感谢您的帮助!并为你的mgronber! – matthew3r 2011-04-12 14:49:10

+0

很高兴能帮到;) – 2011-04-12 14:51:17

4

您正在创建一个新实例StringActivity,然后通过getArtist()获取值。它返回空字符串,因为该实例是本地的,并没有被设置为其他任何东西。

不幸的是,我没有做任何Android开发,所以我不知道你应该如何传递数据。也许可以用作为参数传递的Bundle来完成,或者可能有其他方法。我想应该很容易找到你是否搜索Android文档和例子。

+1

哈,我完全错过了一个......比我更好的答案.. – sydlawrence 2011-04-12 14:34:46

+0

是的,你是对的,但你可以详细说明如何去做;) – 2011-04-12 14:38:35

+0

我明白你的答案,但不知道我应该改变什么。你能写出来吗?谢谢! – matthew3r 2011-04-12 14:40:03