2016-10-25 13 views
0

私は音楽プレーヤーappを開発しています。私のプロジェクトには、リストビューが1つあり、最近リストに表示されたリストビューが1つあります。最近再生された曲listview.Butに表示されている曲リストビューの曲から曲のリストビューから同じ曲を選択すると最近のリストビューにも表示され、カスタムリストビューアダプターを使用しています。リストビューは別のリストビューから値を選択すると繰り返し値を表示します

最近の曲リストでは、繰り返し選択されていない曲が1つだけ表示されます。

ここでは、この私の最近の曲リストScreenshote

anyoneknowどの場合、これは、そう

public class Playlists extends ListFragment { 


EditText edtSearch; 
SongAdapter songAdapter; 
SongsManager songsManager = new SongsManager(); 
private static final int ALERT_DIALOG = 1; 

// Songs list 
public ArrayList<SongModel> songsList = new ArrayList<>(); 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View windows = inflater.inflate(R.layout.playlist, container, false); 
    return windows; 
} 

@Override 
public void onViewCreated(View v, Bundle savedInstanceState) { 
    super.onViewCreated(v, savedInstanceState); 

    getListView().setFastScrollEnabled(true); 

    //ListView animation 
    LayoutAnimationController controller 
      = AnimationUtils.loadLayoutAnimation(
      getActivity(), R.anim.list_layout_controller); 
    getListView().setLayoutAnimation(controller); 

    edtSearch = (EditText)getView().findViewById(R.id.search); 
    final ArrayList<SongModel> songsListData = songsManager.songList; 
    Log.i("songsListData...",""+songsListData.size()); 
    SongsManager plm = new SongsManager(); 

    // get all songs from sdcard 
    this.songsList = plm.getPlayList(); 

    // looping through playlist 
    for (int i = 0; i < songsListData.size(); i++) { 
     SongModel song = songsListData.get(i); 
     songsListData.add(song); 
    } 

    //Songlist custom array adapter 
    songAdapter = new SongAdapter(getActivity(),songsList); 
    setListAdapter(songAdapter); 

    // selecting single ListView item 
    ListView lv = getListView(); 

    // listening to single listitem click 
    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View arg0, 
           int position, long id) { 

      Log.i("Index", "..." + position); 
      songAdapter.setSelectedIndex(position); 
      Intent i = new Intent(getActivity().getApplicationContext(),Main.class); 
      i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); 
      SongModel songModel = (SongModel) songAdapter.getItem(position); 
      int indexOfSong = songAdapter.songsList.indexOf(songModel); 

      // Sending songIndex to PlayerActivity 
      i.putExtra("songIndex", indexOfSong); 
      getActivity().setResult(100,i); 
      startActivityForResult(i, 100); 
      Player.mp.stop(); 

      Constant.status = 0; 

      //putting song in recentSongList arraylist 
      SongModel model = (SongModel) songAdapter.getItem(position); 
      model.setSongTitle(songModel.getSongTitle()); 
      model.setSongPath(songModel.getSongPath()); 
      Constant.recentSongList.add(model); 
      Log.i("recentSongList...", "..." + Constant.recentSongList.size()); 
      getActivity().finish(); 
     } 
    }); 
    lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 
     @Override 
     public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { 

      removeItemFromList(position); 
      return true; 
     } 

     private void removeItemFromList(int position) { 

      final int deletePosition = position; 

      Dialog dialog = null; 
      ContextThemeWrapper ctw = new ContextThemeWrapper(getActivity(), R.style.MyTheme); 
      CustomBuilder builder = new CustomBuilder(ctw); 

      builder.setTitle("Delete"); 
      builder.setMessage("Do you want delete this song?"); 
      builder.setPositiveButton("YES", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        // TOD O Auto-generated method stub 
        songsList.remove(deletePosition); 
        songAdapter.notifyDataSetChanged(); 
        songAdapter.notifyDataSetInvalidated(); 

       } 
      }); 
      builder.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        // TODO Auto-generated method stub 
        dialog.dismiss(); 
       } 
      }); 

      builder.show(); 
     } 
    }); 
    edtSearch.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

     } 

     @Override 
     public void onTextChanged(CharSequence cs, int start, int before, int count) { 

     } 

     @Override 
     public void afterTextChanged(Editable s) { 
      String text = edtSearch.getText().toString().toLowerCase(Locale.getDefault()); 
      songAdapter.filter(text); 
     } 
    }); 
} 
@Override 
public void setUserVisibleHint(boolean isVisibleToUser) { 
    super.setUserVisibleHint(isVisibleToUser); 

    if (this.isVisible()) { 
     // If we are becoming invisible, then... 
     Log.d("setUserVisibleHint()...", "PlayList...Visible"); 
     if (!isVisibleToUser) { 
      Log.d("setUserVisibleHint()...", "PlayList...notVisible"); 
      // TODO stop audio playback 
     } 
    } 
} 
} 

と最近の曲リストフラグメント

public class RecentSongList extends ListFragment{ 


ResentSongListAdapter adapter; 
public ArrayList<SongModel> recentSongList = Constant.recentSongList; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    View windows = inflater.inflate(R.layout.recent_playlist, container, false); 
    Log.i("recent Song List...", "..." + recentSongList.size()); 
    return windows; 
} 
@Override 
public void onViewCreated(View v, Bundle savedInstanceState) { 

    //ListView animation 
    LayoutAnimationController controller = AnimationUtils.loadLayoutAnimation(getActivity(), R.anim.list_layout_controller); 
    getListView().setLayoutAnimation(controller); 

    adapter = new ResentSongListAdapter(getActivity(), recentSongList); 
    setListAdapter(adapter); 

    ListView lv = getListView(); 

    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

      Log.i("Index", "..." + position); 
      Intent i = new Intent(getActivity().getApplicationContext(),Main.class); 
      i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); 
      SongModel songModel = (SongModel) adapter.getItem(position); 
      int indexOfSong = recentSongList.indexOf(songModel); 
      // Sending songIndex to PlayerActivity 
      i.putExtra("songIndex", indexOfSong); 
      getActivity().setResult(100, i); 
      startActivityForResult(i, 100); 
      Player.mp.stop(); 
      getActivity().finish(); 
      Constant.status = 1; 
     } 
    }); 
} 
} 

フラグメント曲のリストです私はこれを教えてくれます。

+0

あなたはこのためにデータベースを使用する場合は、最近の曲にフラグ値を保存考えると「プレーヤー」タブ内のすべての曲を表示し、フラグが立てられた値に応じてクエリを作成し、「最近」タブ内に表示します。 – vidulaJ

+0

私はdatabase.iを使用していません。この値を1つのリストビューから別のリストビューに単純に渡しています。 –

+0

次に2つのArrayListを保持しますか? – vidulaJ

答えて

5
In Song Fragment , 
When you add Model to RecentSongList in it 1st check songModel.getSongTitle Already exist in the recent song list . 
If it exists dont add it again. 
Else add it to the adapter. 
boolean flag =false; 
for(int i=0;i<recentSongList.size();i++){ 
    // here check whether the songTitle already exists in the list or not 
if it does, ignore and break else continue and add to the list 

if(recentSongList.get(i).getSongTitle.equals(model.getSongTitle())){ 
//don't add 
flag = true; 
break; 
} 
} 

if(!flag){ 
Constant.recentSongList.add(model); 
flag = false; 
} 

Hope this might help you. 
+0

thxx..It working。 –

関連する問題