2016-07-09 4 views
0

私はAndroidが初めてです。別のクラスからArrayListにアクセスしていますが、クラスにアクセスする際にArrayListのサイズがゼロになっています。メインクラスでは、配列リストのサイズが正の値を示します。なぜ私はクラスにアクセスする際にサイズがゼロになっているのかわかりません。私のコードで間違いがないかチェックしてください。別のクラスからのアクセス時にArrayListサイズをゼロにする

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'を使用してフラグメントを取得し、対応するメソッドを呼び出す必要があります。たとえば、[この質問](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)); 

はいつでも呼び出されません

関連する問題