2016-10-25 4 views
0

Je développe l'application de joueur de musique. Selon mon projet j'ai une listview qui montre la liste des chansons et une autre listview qui montre des chansons récemment lues. Ainsi, quand je choisis un particulier chanson de la liste de liste de chanson qui est affichée sur la liste de lecture récente de chansonlisted.But quand je sélectionne la même chanson de la liste des chansons listview il peut également afficher sur la liste de lecture récente et j'utilise l'adaptateur listview personnalisé. Donc, je veux montrer seulement une chanson qui n'est pas répétée dans la liste des chansons récentes.Listview montre la valeur répétée quand sélectionne la valeur d'un autre listview

Voici ce ma liste de chanson récente Screenshote

Voici la liste des fragments de chansons

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 
     } 
    } 
} 
} 

et liste des chansons récentes fragment

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; 
     } 
    }); 
} 
} 

Donc, si anyoneknow comment Je peux le faire dis-moi.

+0

Si vous utilisez une base de données pour cette envisager d'économiser une valeur de drapeau pour les chansons récentes et afficher toutes les chansons dans l'onglet « Player » et faire une requête en fonction de la valeur signalée et les afficher à l'intérieur « récente » Tab. – vidulaJ

+0

Je n'utilise pas database.i je passe cette valeur simplement d'une liste à une autre listview. –

+0

Vous conservez deux ArrayLists alors? – vidulaJ

Répondre

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..Il travaille. –