木雨音乐 项目开发(三)主界面MainActivity
来源:互联网 发布:linux mysql5.7安装 编辑:程序博客网 时间:2024/04/29 19:34
MainActivity主界面
(项目代码已经基本完成,粘贴代码为完整代码)
木雨音乐 APP已在百度手机助手上架,有兴趣的朋友可以下载测试,下载地址:http://shouji.baidu.com/software/9785031.html
木雨音乐源码下载地址:http://download.csdn.net/detail/haoxue641/9610782
希望大家多提宝贵意见
实现功能与主要方法:
1、使用PagerSlidingTabStrip实现本地音乐与网络推荐之间的切换
2、返回键退出提示
3、菜单键
界面截图
MainActivity.java(主界面类)
CustomDialog.java(自定义对话框类)
activity_main.xml(主界面布局文件)
main_menu.xml(菜单项布局文件)
alert_dialog.xml(自定义对话框布局)
styles.xml(主题风格属性文件)
MuyuPlayerAPP.java(全局对象)
MainActivity.java代码如下
package com.haoxue.zixueplayer;import android.app.NotificationManager;import android.content.DialogInterface;import android.content.Intent;import android.content.SharedPreferences;import android.graphics.drawable.ColorDrawable;import android.graphics.drawable.Drawable;import android.graphics.drawable.LayerDrawable;import android.graphics.drawable.TransitionDrawable;import android.os.Build;import android.os.Bundle;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentPagerAdapter;import android.support.v4.view.ViewPager;import android.util.TypedValue;import android.view.KeyEvent;import android.view.Menu;import android.view.MenuItem;import com.astuetz.PagerSlidingTabStrip;import com.haoxue.zixueplayer.utils.CustomDialog;/** * 主Activity * 由于本人艺术感太差,UI界面比较丑,请自行设计 */public class MainActivity extends BaseActivity implements DownloadDialogFragment.DownloadSuccessListener, MyMusicListFragment.SuccessListener { private PagerSlidingTabStrip tabs; private ViewPager pager; private MyPagerAdapter adapter; private Drawable oldBackground = null; private int currentColor = 0x98000000; private MyMusicListFragment myMusicListFragment; private NetMusicListFragment netMusicListFragment; public MuyuPlayerApp app;//取出全局对象 方便调用 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); app = (MuyuPlayerApp) getApplication(); setContentView(R.layout.activity_main); tabs = (PagerSlidingTabStrip) findViewById(R.id.tabs); pager = (ViewPager) findViewById(R.id.pager); adapter = new MyPagerAdapter(getSupportFragmentManager()); pager.setAdapter(adapter); final int pageMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 4, getResources() .getDisplayMetrics()); pager.setPageMargin(pageMargin); tabs.setViewPager(pager); initService(); changeColor(currentColor); } @Override public void publish(int progress) { //更新进度条 } @Override public void change(int position) { //切换状态播放位置 if (pager.getCurrentItem() == 0) { myMusicListFragment.loadData(); myMusicListFragment.changeUIStatusOnPlay(position); } else if (pager.getCurrentItem() == 1) { } } private void changeColor(int newColor) { tabs.setIndicatorColor(newColor); // change ActionBar color just if an ActionBar is available if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { Drawable colorDrawable = new ColorDrawable(newColor); Drawable bottomDrawable = getResources().getDrawable(R.drawable.actionbar_bottom); LayerDrawable ld = new LayerDrawable(new Drawable[]{colorDrawable, bottomDrawable}); if (oldBackground == null) { getActionBar().setBackgroundDrawable(ld); } else { TransitionDrawable td = new TransitionDrawable(new Drawable[]{oldBackground, ld}); getActionBar().setBackgroundDrawable(td); td.startTransition(200); } oldBackground = ld; getActionBar().setDisplayShowTitleEnabled(false); getActionBar().setDisplayShowTitleEnabled(true); } } @Override public void downloadSuccessListener(String isDownloadSuccess) { System.out.println("MainActivity.downloadSuccessListener = " + isDownloadSuccess); if (isDownloadSuccess.length() > 0) { //问题:下载完成后,确实通知媒体库更新了,但是马上初始化数据,可能媒体库还没有更新 //临时解决:在ActionBar上,添加一个刷新按钮 //更新本地音乐列表 myMusicListFragment.loadData();//初始化数据 myMusicListFragment.newInstance();//重新实例化一下本地音乐Fragment,加载新的数据 } } @Override public void successListener(String isSuccess) { //问题:删除完成后,确实通知媒体库更新了,但是马上初始化数据,可能媒体库还没有更新 //临时解决:在ActionBar上,添加一个刷新按钮 myMusicListFragment.loadData();//初始化数据 MyMusicListFragment.newInstance();//重新实例化一下本地音乐Fragment,加载新的数据 } public class MyPagerAdapter extends FragmentPagerAdapter { private final String[] TITLES = {getString(R.string.my_music), getString(R.string.net_music)}; public MyPagerAdapter(FragmentManager fm) { super(fm); } @Override public CharSequence getPageTitle(int position) { return TITLES[position]; } @Override public int getCount() { return TITLES.length; } @Override public Fragment getItem(int position) { if (position == 0) { if (myMusicListFragment == null) { myMusicListFragment = MyMusicListFragment.newInstance(); } return myMusicListFragment; } else if (position == 1) { if (netMusicListFragment == null) { netMusicListFragment = NetMusicListFragment.newInstance(); } return netMusicListFragment; } return null; } } //菜单项 @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main_menu, menu); return true; } public boolean onOptionsItemSelected(MenuItem item) { Intent intent; switch (item.getItemId()) { case R.id.newMyMusic: myMusicListFragment.loadData();//初始化数据 MyMusicListFragment.newInstance();//重新实例化一下本地音乐Fragment,加载新的数据 break; case R.id.ilike: intent = new Intent(this, MyLikeMusicListActivity.class); startActivity(intent); break; case R.id.near_play: intent = new Intent(this, PlayRecordListActivity.class); startActivity(intent); break; case R.id.about: intent = new Intent(this, AboutActivity.class); startActivity(intent); break; case R.id.exit: stopService(new Intent(this, PlayService.class)); exit(); break; } return true; } @Override protected void onDestroy() { super.onDestroy(); //保存当前播放的一些状态值 MuyuPlayerApp app = (MuyuPlayerApp) getApplication(); SharedPreferences.Editor editor = app.sp.edit(); editor.putInt("currentPosition", playService.getCurrentPosition()); editor.putInt("play_mode", playService.getPlay_mode()); editor.commit(); } /** * 按返回键弹出对话框确定退出 */// @Override// public boolean onKeyDown(int keyCode, KeyEvent event)// {// if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN )// {// // 创建退出对话框// AlertDialog isExit = new AlertDialog.Builder(this).create();// // 设置对话框标题// isExit.setTitle("系统提示");// // 设置对话框消息// isExit.setMessage("确定要退出吗");// // 添加选择按钮并注册监听// isExit.setButton("取消", listener);// isExit.setButton2("确定", listener);// // 显示对话框// isExit.show();//// }//// return false;//// }// /**监听对话框里面的button点击事件*/// DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener()// {// public void onClick(DialogInterface dialog, int which)// {// switch (which)// {// case AlertDialog.BUTTON_POSITIVE:// "确认"按钮退出程序//// break;// case AlertDialog.BUTTON_NEGATIVE:// "取消"第二个按钮取消对话框// exit();// break;// default:// break;// }// }// }; /** * 按返回键弹出对话框确定退出 */ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) { new CustomDialog.Builder(MainActivity.this) .setTitle(R.string.info) .setMessage(R.string.dialog_messenge) .setPositiveButton(R.string.confrim, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { exit(); } }).setNeutralButton(R.string.cancel, null).show(); return false; } return false; } /** * Notification管理 */ public NotificationManager mNotificationManager; /** * 初始化要用到的系统服务 */ private void initService() { mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); }}
CustomDialog.java代码如下
package com.haoxue.zixueplayer.utils;import android.app.Activity;import android.app.Dialog;import android.content.Context;import android.content.DialogInterface;import android.text.TextUtils;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.view.ViewGroup.LayoutParams;import android.widget.Button;import android.widget.FrameLayout;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TextView;import com.haoxue.zixueplayer.R;/** * 自定义对话框类 * * @author wwj * */public class CustomDialog extends Dialog { public CustomDialog(Context context) { super(context); } public CustomDialog(Context context, int theme) { super(context, theme); } public static class Builder { private Context context; private int mIcon = -1; // 提示图标 private CharSequence mTitle; // 提示标题 private CharSequence mMessage; // 提示内容 private CharSequence mPositiveButtonText; // 确定按钮文本 private CharSequence mNegativeButtonText; // 取消按钮文本 private CharSequence mNeutralButtonText; // 中间按钮文本 private boolean mCancelable = true; // 是否启用取消键 private int mViewSpacingLeft; private int mViewSpacingTop; private int mViewSpacingRight; private int mViewSpacingBottom; private boolean mViewSpacingSpecified = false; // 提示内容View private View mView; // 各种触发事件 private OnClickListener mPositiveButtonClickListener, mNegativeButtonClickListener, mNeutralButtonClickListener; private OnCancelListener mCancelListener; // 取消键事件 private OnKeyListener mKeyListener; // 按键处理 public Builder(Context context) { this.context = context; } public Builder setMessage(CharSequence message) { this.mMessage = message; return this; } public Builder setMessage(int message) { this.mMessage = context.getText(message); return this; } public Builder setTitle(int title) { this.mTitle = context.getText(title); return this; } public Builder setTitle(CharSequence title) { this.mTitle = title; return this; } public Builder setIcon(int icon) { this.mIcon = icon; return this; } public Builder setView(View view) { this.mView = view; mViewSpacingSpecified = false; return this; } public Builder setView(View view, int left, int top, int right, int bottom) { this.mView = view; this.mViewSpacingLeft = left; this.mViewSpacingTop = top; this.mViewSpacingRight = right; this.mViewSpacingBottom = bottom; mViewSpacingSpecified = true; return this; } public Builder setPositiveButton(int textId, final OnClickListener listener) { this.mPositiveButtonText = context.getText(textId); this.mPositiveButtonClickListener = listener; return this; } public Builder setPositiveButton(String text, final OnClickListener listener) { this.mPositiveButtonText = text; this.mPositiveButtonClickListener = listener; return this; } public Builder setNeutralButton(int textId, final OnClickListener listener) { this.mNeutralButtonText = context.getText(textId); this.mNeutralButtonClickListener = listener; return this; } public Builder setNeutralButton(String text, final OnClickListener listener) { this.mNeutralButtonText = text; this.mNeutralButtonClickListener = listener; return this; } public Builder setNegativeButton(int textId, final OnClickListener listener) { this.mNegativeButtonText = context.getText(textId); this.mNegativeButtonClickListener = listener; return this; } public Builder setNegativeButton(String text, final OnClickListener listener) { this.mNegativeButtonText = text; this.mNegativeButtonClickListener = listener; return this; } public Builder setCancelable(boolean cancelable) { this.mCancelable = cancelable; return this; } public Builder setOnCancelListener(OnCancelListener listener) { this.mCancelListener = listener; return this; } public Builder setOnKeyListener(OnKeyListener listener) { this.mKeyListener = listener; return this; } public CustomDialog create() { LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); final CustomDialog dialog = new CustomDialog(context, R.style.CustomDialog); dialog.setCancelable(mCancelable); //设置取消键事件 if(mCancelListener != null) { dialog.setOnCancelListener(mCancelListener); } //设置键盘监听事件 if(mKeyListener != null) { dialog.setOnKeyListener(mKeyListener); } //获取对话框布局 View layout = inflater.inflate(R.layout.alert_dialog, (ViewGroup)(((Activity)context).findViewById(R.id.parentPanel))); layout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); //设置标题 ((TextView) layout.findViewById(R.id.alertTitle)).setText(mTitle); //设置图标 if(mIcon != -1) { ((ImageView) layout.findViewById(R.id.icon)) .setBackgroundResource(mIcon); } int count = 0; //设置确定按钮 if(setButton(layout, mPositiveButtonText, R.id.button1, dialog, mPositiveButtonClickListener)) count++; // 设置拒绝按钮 if(setButton(layout, mNegativeButtonText, R.id.button2, dialog, mNegativeButtonClickListener)) count++; // 设置中间按钮 if(setButton(layout, mNeutralButtonText, R.id.button3, dialog, mNeutralButtonClickListener)) count++; if(count == 0) { layout.findViewById(R.id.buttonPanel).setVisibility(View.GONE); } //一个按钮时,显示两边空间 if(count == 1) { layout.findViewById(R.id.leftSpacer) .setVisibility(View.INVISIBLE); layout.findViewById(R.id.rightSpacer).setVisibility(View.INVISIBLE); } //设置提示消息 if(!TextUtils.isEmpty(mMessage)) { ((TextView)layout.findViewById(R.id.message)) .setText(mMessage); } else { ((LinearLayout) layout.findViewById(R.id.contentPanel)) .setVisibility(View.GONE); } //设置提示内容布局 if(mView != null) { final FrameLayout customPanel = (FrameLayout) layout .findViewById(R.id.customPanel); if(mViewSpacingSpecified) { customPanel.setPadding(mViewSpacingLeft, mViewSpacingTop, mViewSpacingRight, mViewSpacingBottom); } customPanel.addView(mView); } else { ((FrameLayout) layout.findViewById(R.id.customPanel)) .setVisibility(View.GONE); } dialog.setContentView(layout); return dialog; } public CustomDialog show() { CustomDialog dialog = create(); dialog.show(); return dialog; } private boolean setButton(View layout, CharSequence mPositiveButtonText, int id, final Dialog dialog, final OnClickListener listener) { if(!TextUtils.isEmpty(mPositiveButtonText)) { final Button button = (Button) layout.findViewById(id); button.setText(mPositiveButtonText); if(listener != null) { button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { listener.onClick(dialog, DialogInterface.BUTTON_POSITIVE); } }); } else { //默认事件为关闭对话框 button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.cancel(); dialog.dismiss(); } }); } return true; } else { layout.findViewById(id).setVisibility(View.GONE); return false; } } }}
activity_main.xml代码如下
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <com.astuetz.PagerSlidingTabStrip android:id="@+id/tabs" android:layout_width="match_parent" android:layout_height="48dip" /> <android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/tabs" tools:context=".MainActivity" /><FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/content"></FrameLayout></RelativeLayout>
main_menu.xml代码如下
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/newMyMusic" android:title="@string/newMyMusic" android:orderInCategory="100" android:icon="@android:drawable/ic_menu_rotate" android:showAsAction="ifRoom"/> <item android:id="@+id/ilike" android:orderInCategory="200" android:title="@string/like_music" app:showAsAction="ifRoom" android:icon="@android:drawable/ic_menu_set_as"/> <item android:id="@+id/near_play" android:orderInCategory="300" android:title="@string/recently_music" app:showAsAction="ifRoom" android:icon="@android:drawable/ic_media_play"/> <item android:id="@+id/about" android:orderInCategory="400" android:title="@string/about" app:showAsAction="ifRoom" android:icon="@android:drawable/ic_media_play"/> <item android:id="@+id/exit" android:orderInCategory="500" android:title="@string/exit" app:showAsAction="ifRoom" android:icon="@android:drawable/ic_media_play"/></menu>
alert_dialog.xml代码如下
<?xml version="1.0" encoding="UTF-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/parentPanel" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="3dip" > <!-- 图标和标题 --> <LinearLayout android:id="@+id/topPanel" android:layout_width="fill_parent" android:layout_height="wrap_content" android:minHeight="45dip" android:orientation="vertical" > <LinearLayout android:id="@+id/title_template" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margin="3dip" android:gravity="center_vertical" android:orientation="horizontal" > <ImageView android:id="@+id/icon" android:layout_width="20dp" android:layout_height="20dp" android:layout_gravity="top" android:layout_margin="3dip" android:src="@mipmap/ic_dialog" /> <com.android.internal.widget.DialogTitle android:id="@+id/alertTitle" style="@style/textAppearanceDialogWindowTitle" android:layout_width="fill_parent" android:layout_height="wrap_content" android:ellipsize="end" android:singleLine="true" /> </LinearLayout> <ImageView android:id="@+id/titleDivider" android:layout_width="fill_parent" android:layout_height="1dip" android:layout_marginLeft="5dip" android:layout_marginRight="5dip" android:background="@color/dialog_line" android:gravity="fill_horizontal" android:scaleType="fitXY" /> </LinearLayout> <!-- 显示内容消息 --> <LinearLayout android:id="@+id/contentPanel" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_margin="5dp" android:layout_weight="1" android:orientation="vertical" > <ScrollView android:id="@+id/scrollView" android:layout_width="fill_parent" android:layout_height="wrap_content" android:padding="5dip" > <TextView android:id="@+id/message" style="@style/textAppearanceDialogWindowTitle" android:layout_width="fill_parent" android:layout_height="wrap_content" android:padding="5dip" /> </ScrollView> </LinearLayout> <!-- 显示内容布局 --> <FrameLayout android:id="@+id/customPanel" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:paddingBottom="5dip" android:paddingTop="5dip" > </FrameLayout> <!-- 按钮 --> <LinearLayout android:id="@+id/buttonPanel" android:layout_width="fill_parent" android:layout_height="wrap_content" android:minHeight="50dip" android:orientation="vertical" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:orientation="horizontal" android:paddingLeft="2dip" android:paddingRight="2dip" android:paddingTop="4dip" > <LinearLayout style="@style/btn_dialog" android:orientation="horizontal" android:id="@+id/leftSpacer" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="0.25" android:visibility="gone" /> <Button android:id="@+id/button1" style="@style/btn_dialog" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_gravity="left" android:layout_weight="1" android:maxLines="2" /> <Button android:id="@+id/button3" style="@style/btn_dialog" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_weight="1" android:maxLines="2" /> <Button android:id="@+id/button2" style="@style/btn_dialog" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_gravity="right" android:layout_weight="1" android:maxLines="2" /> <LinearLayout style="@style/btn_dialog" android:orientation="horizontal" android:id="@+id/rightSpacer" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="0.25" android:visibility="gone" /> </LinearLayout> </LinearLayout></LinearLayout>
styles.xml代码如下
<resources> <style name="AppBaseTheme" parent="android:Theme.Light"></style> <style name="AppTheme" parent="AppBaseTheme"> <item name="android:windowBackground">@mipmap/main_bg01</item> <item name="android:actionBarStyle">@style/ActionBarStyle</item> </style> <style name="ActionBarStyle" parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse"> <item name="android:icon">@mipmap/app_logo4</item> <item name="android:background">#002D2C2C</item> </style> <style name="textAppearanceDialogWindowTitle"> <item name="android:textSize">15sp</item> <item name="android:textColor">#FFFFFFFF</item> <item name="android:textStyle">normal</item> </style> <style name="CustomDialog"> <!-- 屏幕背景不变暗 --> <!-- <item name="android:backgroundDimEnabled">false</item> --> <!-- 更换背景图片实现全透明 --> <item name="android:windowBackground">@color/translucence</item> <item name="android:windowNoTitle">true</item> <!-- 边框 --> <item name="android:windowFrame">@null</item> <!-- 是否悬浮在Activity之上 --> <item name="android:windowIsFloating">true</item> <!-- 半透明 --> <!-- <item name="android:windowIsTranslucent">true</item> --> <item name="android:windowContentOverlay">@null</item> <item name="android:windowTitleStyle">@style/dialogWindowTitle</item> <item name="android:windowAnimationStyle">@style/animationDialog</item> <item name="android:popupBackground">@color/translucence</item> <!-- android:windowSoftInputMode = "adjustResize" ,软键盘弹出时,要对主窗口布局重新进行布局,并调用onSizeChanged方法,切记一点当我们设置为“adjustResize”时,我们的界面不要设置为全屏模式,否则设置了这个属性也不会有什么效果。 而当我们设置android: windowSoftInputMode = "adjustPan"时,主窗口就不会调用onSizeChanged方法,界面的一部分就会被软键盘覆盖住,就不会被挤到软键盘之上了。 --> <item name="android:windowSoftInputMode">adjustPan</item> </style> <style name="dialogWindowTitle"> <item name="android:textAppearance">@style/textAppearanceDialogWindowTitle</item> <item name="android:maxLines">1</item> <item name="android:scrollHorizontally">true</item> </style> <style name="animationDialog"> <item name="android:windowEnterAnimation">@anim/dialog_enter</item> <item name="android:windowExitAnimation">@anim/dialog_exit</item> </style> <style name="btn_dialog"> <item name="android:layout_marginLeft">3dp</item> <item name="android:layout_marginRight">3dp</item> <item name="android:paddingLeft">25dp</item> <item name="android:paddingRight">25dp</item> <item name="android:paddingTop">10dp</item> <item name="android:paddingBottom">10dp</item> <item name="android:textSize">12sp</item> <item name="android:textColor">#FFFFFFFF</item> <item name="android:background">@drawable/btn_dialog</item> </style> <style name="btn_custom_style"> <item name="android:layout_width">35dip</item> <item name="android:layout_height">35dip</item> <item name="android:layout_gravity">center|right</item> <item name="android:background">?android:listChoiceBackgroundIndicator</item> </style> <style name="NotificationContent"> <item name="android:textColor">?android:attr/textColorPrimary</item> </style> <style name="NotificationTitle"> <item name="android:textColor">?android:attr/textColorPrimary</item> <item name="android:textStyle">bold</item> </style></resources>
MuyuPlayerAPP.java代码如下
package com.haoxue.zixueplayer;import android.app.Application;import android.content.Context;import android.content.SharedPreferences;import com.haoxue.zixueplayer.utils.Constant;import com.lidroid.xutils.DbUtils;/** * Created by Administrator on 2016/7/29. */public class MuyuPlayerApp extends Application{ public static SharedPreferences sp; public static DbUtils dbUtils; public static Context context; @Override public void onCreate() { super.onCreate(); sp=getSharedPreferences(Constant.SP_NAME, Context.MODE_PRIVATE); dbUtils=DbUtils.create(getApplicationContext(),Constant.DB_NAME); context=getApplicationContext(); }}
0 0
- 木雨音乐 项目开发(三)主界面MainActivity
- Android开发本地及网络Mp3音乐播放器(三)MainActivity(主界面)
- 木雨音乐 项目开发(八)最近播放界面
- 木雨音乐 项目开发(六)音乐播放界面PlayActivity实现
- 木雨音乐 项目开发(七)我的收藏界面
- 木雨音乐 项目开发(四)本地音乐MyMusicListFragment
- 木雨音乐 项目开发(一)
- 小项目口袋新闻主界面实现之MainActivity
- Android 音乐播放器的开发教程(三) 小卷毛播放器的主界面开发 ---- 小达
- 木雨音乐 项目开发(二)(闪屏页)
- 木雨音乐 项目开发(十)网络推荐——加载各大榜单网络音乐列表
- 音乐类软件LoveMusic开发(三)----登录界面
- jeesite项目学习(三)前台界面开发及展示
- 解读(三):分析MainActivity, 程序的界面主体框架
- 木雨音乐 项目开发(五)Service服务实现播放等功能
- 木雨音乐 项目开发(九)网络推荐——设置九大榜单
- 木雨音乐 项目开发(十一)网络推荐——搜索歌曲
- Android-贪吃蛇(三)- Mainactivity
- 归并排序算法的java实现
- Tomcat 404问题详解
- [JZOJ4711] Binary
- 写一个简单的BootLoader(四)——链接文件boot.lds分析笔记
- 【备战NOIP2012图论专项模拟试题】砍树
- 木雨音乐 项目开发(三)主界面MainActivity
- TCP知识2
- Java函数参数的“传值”与“传引用”
- 全方位解读反射
- 六大设计原则之单一职责原则
- JZOJ.4709【NOIP2016提高A组模拟8.17】Matrix
- 计算机视觉相关领域网站整理
- MongoDB高级查询详细
- HIHO #1128 : 二分·二分查找(快速排序一半)