package com.lq.fragment; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.content.res.Resources; import android.net.Uri; import android.os.Bundle; import android.support.v4.app.ListFragment; import android.util.Pair; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ListView; import android.widget.SectionIndexer; import android.widget.TextView; import com.lq.activity.FeedbackActivity; import com.lq.activity.MainContentActivity; import com.lq.activity.MyPreferenceActivity; import com.lq.xpressmusic.R; /** * @author lq 2013-6-1 lq2625304@gmail.com * */ public class MenuFragment extends ListFragment { private ListView mListView = null; @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); mListView = (ListView) getListView(); mListView .setBackgroundColor(getResources().getColor(R.color.grey_dark)); setListAdapter(new SectionAdapter()); } @Override public void onListItemClick(ListView l, View v, int position, long id) { String newContent = null; switch (position) { // 对应res/array.xml中选项的顺序 case 0:// TODO 本地音乐 newContent = FrameLocalMusicFragment.class.getName(); break; case 1:// TODO 歌手 newContent = FrameArtistFragment.class.getName(); break; case 2:// TODO 专辑 newContent = FrameAlbumFragment.class.getName(); break; case 3:// TODO 文件夹 newContent = FrameFolderFragment.class.getName(); break; case 4:// TODO 收藏列表 newContent = FramePlaylistFragment.class.getName(); break; case 5:// TODO 系统设置 startActivity(new Intent(getActivity(), MyPreferenceActivity.class)); return; case 6:// TODO 意见反馈 startActivity(new Intent(getActivity(), FeedbackActivity.class)); break; case 7:// TODO 支持作者 supportMe(); break; case 8:// TODO 退出 ((MainContentActivity) getActivity()).exit(); break; } if (newContent != null) { switchFragment(newContent); } } private void supportMe() { new AlertDialog.Builder(getActivity()) .setMessage(R.string.support_developer) .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Uri uri = Uri .parse(getString(R.string.my_alipay)); Intent intent = new Intent(Intent.ACTION_VIEW, uri); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } }) .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }).create().show(); } // the meat of switching the above fragment private void switchFragment(String fragment) { if (getActivity() == null) return; else if (getActivity() instanceof MainContentActivity) { MainContentActivity a = (MainContentActivity) getActivity(); a.switchContent(fragment); } } private List<Pair<String, List<String>>> getData() { List<Pair<String, List<String>>> mDataList = new ArrayList<Pair<String, List<String>>>(); Resources res = getResources(); String[] section_titles = { res.getString(R.string.my_music), res.getString(R.string.other_functions) }; String[][] menu_titles = { res.getStringArray(R.array.menu_mymusic), res.getStringArray(R.array.menu_othersettings) }; for (int i = 0; i < section_titles.length; i++) { mDataList.add(new Pair<String, List<String>>(section_titles[i], Arrays.asList(menu_titles[i]))); } return mDataList; } private class SectionAdapter extends BaseAdapter implements SectionIndexer { List<Pair<String, List<String>>> dataList = getData(); @Override public int getCount() { int res = 0; for (int i = 0; i < dataList.size(); i++) { res += dataList.get(i).second.size(); } return res; } @Override public String getItem(int position) { int c = 0; for (int i = 0; i < dataList.size(); i++) { if (position >= c && position < c + dataList.get(i).second.size()) { return dataList.get(i).second.get(position - c); } c += dataList.get(i).second.size(); } return null; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { convertView = LayoutInflater.from(getActivity()).inflate( R.layout.list_item_menu, null); holder = new ViewHolder(); holder.menu_title = (TextView) convertView .findViewById(R.id.menu_title); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.menu_title.setText(getItem(position)); final int section = getSectionForPosition(position); boolean displaySectionHeaders = (getPositionForSection(section) == position); bindSectionHeader(convertView, position, displaySectionHeaders); return convertView; } protected void bindSectionHeader(View view, int position, boolean displaySectionHeader) { View section_item = view.findViewById(R.id.list_item_section); if (displaySectionHeader) { section_item.setVisibility(View.VISIBLE); TextView lSectionTitle = (TextView) view .findViewById(R.id.list_item_section_text); lSectionTitle .setText(getSections()[getSectionForPosition(position)]); } else { section_item.setVisibility(View.GONE); } } @Override public int getPositionForSection(int section) { if (section < 0) section = 0; if (section >= dataList.size()) section = dataList.size() - 1; int c = 0; for (int i = 0; i < dataList.size(); i++) { if (section == i) { return c; } c += dataList.get(i).second.size(); } return 0; } @Override public int getSectionForPosition(int position) { int c = 0; for (int i = 0; i < dataList.size(); i++) { if (position >= c && position < c + dataList.get(i).second.size()) { return i; } c += dataList.get(i).second.size(); } return -1; } @Override public String[] getSections() { String[] res = new String[dataList.size()]; for (int i = 0; i < dataList.size(); i++) { res[i] = dataList.get(i).first; } return res; } } private static class ViewHolder { public TextView menu_title; } }