2016-07-09 1 views
0

Android가 처음입니다. 나는 다른 클래스에서 ArrayList에 액세스하지만 클래스에 액세스하는 경우 ArrayList의 크기가 0이됩니다. 메인 클래스에서는 배열리스트의 크기가 양의 값을 나타낸다. 내가 왜 클래스에 액세스 할 때 크기가 0이되는지 알지 못한다. 실수에 대한 코드를 확인하십시오.다른 클래스에서 액세스 할 때 ArrayList 크기가 0이됩니다.

Tab3Tracks 클래스

public class Tab3Tracks extends ListFragment { 

public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
} 

private ArrayList<String> trackslist = new ArrayList<>(); 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View v = inflater.inflate(R.layout.tab3tracks, container, false); 


    final String trackid = MediaStore.Audio.Media._ID; 
    final String trackno = MediaStore.Audio.Media.TRACK; 
    final String trackname = MediaStore.Audio.Media.TITLE; 
    final String path = MediaStore.Audio.Media.DATA; 
    Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 

    ContentResolver cr = getContext().getContentResolver(); 
    final String[] projection = {trackid,trackno,trackname,path 
    }; 
    final Cursor cursor = cr.query(uri,projection,null,null,null); 
    if (cursor!=null){ 
     if(cursor.moveToFirst()){ 
      do{ 
       int trackIndex = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE); 
       trackslist.add(cursor.getString(trackIndex)); 
      }while(cursor.moveToNext()); 
     }System.out.println(trackslist.size()); 
    } cursor.close(); 


    ArrayAdapter<String> adapter = new ArrayAdapter<String>(
      getActivity(),R.layout.playlist_item,R.id.songTitle,trackslist 
    ); 
    setListAdapter(adapter); 
    return v; 
} 


public ArrayList<String> getList(){ 
    return trackslist; 
} 



@Override 
public void onListItemClick(ListView l, View v, int position, long id) { 
    super.onListItemClick(l, v, position, id); 
    int songIndex = position; 

    // Starting new intent 
    Intent in = new Intent(getActivity(), NowPlaying.class); 
    // Sending songIndex to PlayerActivity 
    in.putExtra("songIndex", songIndex); 
    startActivityForResult(in, 100); 
} 
} 

NowPlaying 클래스

public class NowPlaying extends AppCompatActivity { 
public ArrayList<String> songsList = new ArrayList<String>(); 
public Tab3Tracks tab3tracks; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.player); 
    // Getting all songs list 
    tab3tracks = new Tab3Tracks(); 
    songsList= tab3tracks.getList(); 
    System.out.println("songsListSize"+songsList.size()); 
    System.out.println("List" +songsList); 

} 
+2

분명하지 않습니까? * Tab3Tracks *의 새로운 인스턴스를 인스턴스화하고 있기 때문에 라이프 사이클 메소드가 트리거되지 않으므로 ArrayLists는 분명히 비어 있습니다. 'Fragment'에서 데이터에 액세스하려면'FragmentManager'를 사용하여 Fragment를 가져온 다음 해당 메소드를 호출해야합니다. 예를 들어보십시오 [이 질문] (http://stackoverflow.com/questions/10903077/calling-a-fragment-method-from-a-parent-activity) – reVerse

답변

0

ArrayList가 초기화되었지만 아무 것도 추가되지 않았습니다.

trackslist.add(cursor.getString(trackIndex)); 

onCreateView 내부에 중첩되어있어 한 번만 호출됩니다. onTuchListener를 액티비티에 추가하고 리스너 내부에 코드를 추가하여 화면이 터치 될 때마다 업데이트되도록 할 수 있습니다.

스레드 내부에 추가하는 것도 효과가있을 수 있지만 실제로는 코드에 따라 다릅니다.

0

조각에보기가 팽창 할 경우 안드로이드에 의해 호출됩니다 Tab3Tracks의 onCreateView, 그래서 배열이 비어 있기 때문에이 코드

trackslist.add(cursor.getString(trackIndex)); 

언제라도 호출하지 않습니다

관련 문제