package com.kitty.poclient.fragment.mymusic; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.AbsListView.OnScrollListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.LinearLayout; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.TextView; import com.kitty.poclient.R; import com.kitty.poclient.adapter.AlbumListAdapter; import com.kitty.poclient.bean.LocalAlbums; import com.kitty.poclient.common.BroadcastManager; import com.kitty.poclient.common.UpnpApp; import com.kitty.poclient.data.VirtualData; import com.kitty.poclient.domain.Album; import com.kitty.poclient.domain.AlbumDetail; import com.kitty.poclient.fragment.TabMusicFragment; import com.kitty.poclient.service.impl.AlbumDetailServiceImpl; import com.kitty.poclient.util.LoadImageAysnc; import com.kitty.poclient.util.SingletonUtil; import com.kitty.poclient.widget.ScrollOverListView; public class AlbumListFragment extends BaseFragment { private static final String TAG = AlbumListFragment.class.getSimpleName(); private LinearLayout llLvAlbums; private TextView tvNoData; // private int sx = -1, sy = -1;// 记录listview的滚动位置 private int sx = -1;// 记录listview的滚动位置 private int scrollTop; private ListView albumsListView; public static ListAdapter adapter; private View view; // private LocalAlbums localAlbums; private int end;// 滑动一屏的结束位置 private View vitem;// 视图listview item private Album album; private View imageView;// 专辑图片 private int albumItemCount; // private final int MSG_INIT_BTN_PLAYER = 23; private Activity attachedActivity; private TabMusicFragment tabMusicFragment; public AlbumListFragment(Activity parentActivity) { attachedActivity = parentActivity; } public AlbumListFragment(Activity parentActivity, TabMusicFragment fragment) { attachedActivity = parentActivity; tabMusicFragment = fragment; } @Override public void onCreate(Bundle savedInstanceState) { Log.e(TAG, "onCreate"); super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Log.i(TAG, "onCreateView"); view = LayoutInflater.from(attachedActivity).inflate(R.layout.album_list_fragment, null); initComponents(); initArguments(); // initListeners(); // registerReceivers(); return view; } public String getFragmentName(){ return TAG; } private void initComponents() { llLvAlbums = (LinearLayout) view.findViewById(R.id.ll_lv_album); tvNoData = (TextView) view.findViewById(R.id.tv_no_data); albumsListView = new ListView(attachedActivity); albumsListView.setDivider(getResources().getDrawable(R.color.divider_common)); albumsListView.setDividerHeight(1); llLvAlbums.addView(albumsListView, 0); } private void initListeners() { albumsListView.setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { // 不滚动时保存当前滚动到的位置 if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) { sx = albumsListView.getFirstVisiblePosition(); end = albumsListView.getLastVisiblePosition(); vitem = albumsListView.getChildAt(0); scrollTop = (vitem == null) ? 0 : vitem.getTop(); SingletonUtil.imagflag = true; LoadImageAysnc.unlock(); if (end < albumItemCount - 4) { end += 2; } for (int i = 0; i < end - sx - 1; i++) { vitem = albumsListView.getChildAt(i + 1); if (vitem != null) { album = VirtualData.albums.get(sx + i); imageView = vitem.findViewById(R.id.iv_album_cover); imageView.setTag(album.getImgUrl()); SingletonUtil.getSingletonUtil().loadAlbumImage(album, albumsListView, imageView); } } } else { SingletonUtil.imagflag = false; LoadImageAysnc.lock(); } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { albumItemCount = totalItemCount; } }); albumsListView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int position, long id) { try { Album album = (Album) albumsListView.getItemAtPosition(position); AlbumDetail albumDetail = new AlbumDetailServiceImpl().getAblumDetail(album.getId()); if (albumDetail != null && albumDetail.getDisklist() != null && albumDetail.getDisklist().size() > 0) { AlbumDetailFragment detailFragment = new AlbumDetailFragment(attachedActivity, tabMusicFragment, albumDetail); tabMusicFragment.showAlbumDetailFragment(detailFragment); }else { // CustomToast.makeText(attachedActivity, "该专辑数据有误", Toast.LENGTH_SHORT).show(); Log.e(TAG, UpnpApp.mainHandler.getString(R.string.album_data_error)); } } catch (Exception e) { e.printStackTrace(); Log.e(TAG, UpnpApp.mainHandler.getString(R.string.album_data_error) + e.getMessage()); } } }); } @Override public void onResume() { // 恢复listview的卷动位置 if (sx != -1) { albumsListView.setSelectionFromTop(sx, scrollTop); } super.onResume(); } @Override public void onDetach() { unregisterReceivers(); super.onDetach(); } private BroadcastReceiver updateListReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { boolean refreshAlbumList = intent.getBooleanExtra(BroadcastManager.EXTRA_INCLUDE_LOCALALBUM, BroadcastManager.EXTRA_BOOLEAN_DEFAULT); Log.i(TAG, "updateListReceiver onReceive, notAlbumList:" + refreshAlbumList); if (refreshAlbumList) { initArguments(); if (adapter != null) { Log.i(TAG, "updateListReceiver onReceive, adapter notifyDataSetChanged"); ((BaseAdapter) adapter).notifyDataSetChanged(); } // 恢复listview的卷动位置 if (sx != -1) { albumsListView.setSelectionFromTop(sx, scrollTop); } } } }; private BroadcastReceiver onCacheStateMapEstablishedReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // 初始化 缓存状态 if(VirtualData.albums!=null && VirtualData.albums.size()>0){ VirtualData.localAlbums = LocalAlbums.translateAlbumList(VirtualData.albums); if (adapter != null) { ((BaseAdapter) adapter).notifyDataSetChanged(); } } } }; private void registerReceivers() { attachedActivity.registerReceiver(updateListReceiver, new IntentFilter(BroadcastManager.FILTER_UPDATE_LOCALLIST)); attachedActivity.registerReceiver(onCacheStateMapEstablishedReceiver, new IntentFilter("onCacheStateMapEstablishedReceiver")); } private void unregisterReceivers() { attachedActivity.unregisterReceiver(updateListReceiver); attachedActivity.unregisterReceiver(onCacheStateMapEstablishedReceiver); } private void initArguments() { tabMusicFragment.refreshPlayStatus(); // if (VirtualData.albums == null || VirtualData.albums.size() == 0) { if (VirtualData.albums == null || VirtualData.albums.size()==0){ showNoData(); } else { showListData(); adapter = new AlbumListAdapter(attachedActivity, albumsListView); albumsListView.setAdapter(adapter); } } private void showNoData() { // 显示暂无数据 llLvAlbums.setVisibility(View.GONE); tvNoData.setVisibility(View.VISIBLE); } private void showListData() { llLvAlbums.setVisibility(View.VISIBLE); tvNoData.setVisibility(View.GONE); } }