变量的值不会显示在另一个类中

时间:2011-04-12 14:29:54

标签: java android variables

我在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类中的艺术家字符串赋值然后它显示,但当我点击一个项目时它保持相同)还是有另一个问题? 谢谢!

2 个答案:

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