Значение переменной не отображается в другом классе - PullRequest
0 голосов
/ 12 апреля 2011

Я делаю программу в 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);
            }
    });
}}

Внутри 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);
}}

Привет, мир существует только потому, что вы видите, что в просмотре текста нет ничего плохого. Возможно, проблема в том, что он не обновляется (он остается неизменным после запуска программы - потому что, когда я даю значение для строки Artist в классе StringActivity, он показывает, но когда я нажимаю на элемент, он остается тоже самое) или есть другая проблема? Спасибо!

Ответы [ 2 ]

4 голосов
/ 12 апреля 2011

Вы создаете новый экземпляр StringActivity, а затем получаете значение с помощью getArtist(). Он возвращает пустую строку, потому что экземпляр является локальным, и он не был установлен как что-либо еще.

К сожалению, я не занимался разработкой для Android, поэтому не знаю, как вам передавать данные. Может быть, это можно сделать с помощью Bundle, который передается в качестве параметра, или, может быть, есть другой способ. Я думаю, это будет довольно легко найти, если вы будете искать в документации и примерах Android.

3 голосов
/ 12 апреля 2011

StringActivity, который вы создаете в своем onClick слушателе, виден только внутри слушателя, а не во втором вашем действии!Вы должны использовать 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...