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.
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
Je n'utilise pas database.i je passe cette valeur simplement d'une liste à une autre listview. –
Vous conservez deux ArrayLists alors? – vidulaJ