2011-04-12 8 views
0

Android에서 Eclipse로 프로그램을 만들고 문제가 있습니다. 나는이 수업을 통해 내가 예술가들을 보여 준다. onClick 메서드 내에서 클릭 한 listitem의 "value"를 보내려고합니다.변수의 값이 다른 클래스에 표시되지 않습니다.

...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 내부에는 선택한 항목이 표시되지만 다른 클래스에는 표시되지 않습니다. 내가 값을 저장하는 경우 여기에 코드입니다 : 여기

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 청취자에서 생성하는 것은 두 번째 활동이 아닌 청취자 내부에서만 볼 수 있습니다! Intent.putExtra()을 사용하여 일부 추가 기능을 의도에 적용한 다음 두 번째 활동에서 Intent.getExtras()을 사용하여 되돌릴 수 있습니다.

그래서에 온 클릭을 변경

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

+0

기꺼이 도와 드리겠습니다;) –

4

StringActivity의 새 인스턴스를 만든 다음 getArtist()으로 값을 가져 오는 중입니다. 인스턴스가 로컬이고 다른 것으로 설정되지 않았으므로 빈 문자열을 반환합니다.

안타깝게도 안드로이드 개발을 전혀하지 않았으므로 데이터를 어떻게 전달해야하는지 모르겠습니다. 어쩌면 매개 변수로 전달 된 Bundle을 사용하여 수행 할 수도 있고 다른 방법이있을 수도 있습니다. 안드로이드 문서와 예제를 검색한다면 쉽게 찾을 수있을 것이라고 생각합니다.

+1

하, 나는 완전히 나보다 하나 ... 더 나은 대답을 놓친 .. – sydlawrence

+0

을 네, 맞습니다.하지만 어떻게 할 수 있겠습니까?) –

+0

나는 당신이 대답한다는 것을 이해하지만, 내가 무엇을 바꿔야하는지 정말로 알지 못합니다. 너는 그것을 쓸 수 있니? 고맙습니다! – matthew3r

관련 문제