編輯:關於Android編程
本文實例為大家分享了Android實現記事本功能的具體代碼,供大家參考,具體內容如下
MainActivity.java代碼:
package siso.smartnotef.activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.view.ViewGroup; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.TextView; import java.util.ArrayList; import java.util.List; import siso.smartnotef.R; import siso.smartnotef.adapter.NotepadeAdapter; import siso.smartnotef.db.DataHelper; import siso.smartnotef.global.GlobalParams; import siso.smartnotef.model.NotepadBean; import siso.smartnotef.model.NotepadWithDataBean; import siso.smartnotef.service.MainService; public class MainActivity extends AppCompatActivity implements View.OnClickListener, NotepadeAdapter.ClickFunction { private TextView tv_add; private ListView lv_contents; private List<NotepadWithDataBean> notepadWithDataBeanList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Intent intent1 = new Intent(MainActivity.this, MainService.class); startService(intent1); findViews(); setListeners(); initView(); } private void findViews() { tv_add = (TextView) findViewById(R.id.tv_add); lv_contents = (ListView) findViewById(R.id.lv_content); } private void setListeners() { tv_add.setOnClickListener(this); } private void initView() { DataHelper helper = new DataHelper(MainActivity.this); notepadWithDataBeanList = new ArrayList<NotepadWithDataBean>(); List<NotepadBean> notepadBeanList = helper.getNotepadList(); for (int i = 0; i < notepadBeanList.size(); i++) { if (0 == notepadWithDataBeanList.size()) { NotepadWithDataBean notepadWithDataBean = new NotepadWithDataBean(); notepadWithDataBean.setData(notepadBeanList.get(0).getDate()); notepadWithDataBeanList.add(notepadWithDataBean); } boolean flag = true; for (int j = 0; j < notepadWithDataBeanList.size(); j++) { int date = notepadWithDataBeanList.get(j).getData(); if (date == notepadBeanList.get(i).getDate()) { notepadWithDataBeanList.get(j).getNotepadBeenList().add(notepadBeanList.get(i)); flag = false; break; } } if (flag) { NotepadWithDataBean notepadWithDataBean = new NotepadWithDataBean(); notepadWithDataBean.setData(notepadBeanList.get(i).getDate()); notepadWithDataBeanList.add(notepadWithDataBean); notepadWithDataBeanList.get(notepadWithDataBeanList.size() - 1).getNotepadBeenList().add(notepadBeanList.get(i)); } } NotepadeAdapter adapter = new NotepadeAdapter(MainActivity.this, notepadWithDataBeanList, this); lv_contents.setAdapter(adapter); // setListViewHeightBasedOnChildren(lv_contents); } public void setListViewHeightBasedOnChildren(ListView listView) { if (listView == null) return; ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) { // pre-condition return; } int totalHeight = 0; for (int i = 0; i < listAdapter.getCount(); i++) { View listItem = listAdapter.getView(i, null, listView); listItem.measure(0, 0); totalHeight += listItem.getMeasuredHeight(); } ViewGroup.LayoutParams params = listView.getLayoutParams(); params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1)); listView.setLayoutParams(params); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.tv_add: Intent intent = new Intent(); Bundle bundle = new Bundle(); bundle.putInt(GlobalParams.TYPE_KEY, GlobalParams.TYPE_ADD); intent.putExtras(bundle); intent.setClass(MainActivity.this, AddContentActivity.class); startActivityForResult(intent, GlobalParams.ADD_REQUEST); break; } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case GlobalParams.ADD_REQUEST: if (GlobalParams.ADD_RESULT_OK == resultCode) { initView(); } break; } } @Override public void clickItem(int position, int itemPosition) { Bundle bundle = new Bundle(); bundle.putInt(GlobalParams.TYPE_KEY, GlobalParams.TYPE_EDIT); bundle.putSerializable(GlobalParams.BEAN_KEY, notepadWithDataBeanList.get(position)); bundle.putInt(GlobalParams.ITEM_POSITION_KEY, itemPosition); Intent intent = new Intent(this, AddContentActivity.class); intent.putExtras(bundle); startActivityForResult(intent, GlobalParams.ADD_REQUEST); } @Override public void longClickItem(final int position, final int itemPostion) { AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setMessage("確認刪除嗎?"); builder.setTitle("提示"); builder.setPositiveButton("確認", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { DataHelper helper = new DataHelper(MainActivity.this); helper.deleteNotepad(notepadWithDataBeanList.get(position).getNotepadBeenList().get(itemPostion).getId()); initView(); } }); builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); builder.create().show(); } }
AddContentActivity.java代碼:
package siso.smartnotef.activity; import android.app.DatePickerDialog; import android.app.TimePickerDialog; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.DatePicker; import android.widget.EditText; import android.widget.TextView; import android.widget.TimePicker; import android.widget.Toast; import java.util.Calendar; import siso.smartnotef.R; import siso.smartnotef.db.DataHelper; import siso.smartnotef.global.GlobalParams; import siso.smartnotef.model.NotepadBean; import siso.smartnotef.model.NotepadWithDataBean; public class AddContentActivity extends AppCompatActivity implements View.OnClickListener { private TextView tv_save; private TextView tv_date; private TextView tv_time; private TextView tv_cancel; private EditText et_content; private String time = ""; private String date = ""; private Bundle bundle; private int type; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_add_content); bundle=getIntent().getExtras(); type=bundle.getInt(GlobalParams.TYPE_KEY); findViews(); setListeners(); initDate(); } private void findViews() { et_content=(EditText)findViewById(R.id.et_content); tv_save = (TextView) findViewById(R.id.tv_save); tv_date = (TextView) findViewById(R.id.tv_date); tv_time = (TextView) findViewById(R.id.tv_time); tv_cancel=(TextView)findViewById(R.id.tv_cancel); } private void setListeners() { tv_save.setOnClickListener(this); tv_date.setOnClickListener(this); tv_time.setOnClickListener(this); tv_cancel.setOnClickListener(this); } private void initDate() { Calendar c = Calendar.getInstance(); int year=c.get(Calendar.YEAR); int month=c.get(Calendar.MONTH); int day=c.get(Calendar.DAY_OF_MONTH); date=getDate(year,month,day); if(type==GlobalParams.TYPE_EDIT){ NotepadWithDataBean notepadWithDataBean=(NotepadWithDataBean)(bundle.getSerializable(GlobalParams.BEAN_KEY)); et_content.setText(notepadWithDataBean.getNotepadBeenList().get(bundle.getInt(GlobalParams.ITEM_POSITION_KEY)).getContent()); date=notepadWithDataBean.getData()+""; tv_date.setText(date); time=notepadWithDataBean.getNotepadBeenList().get(bundle.getInt(GlobalParams.ITEM_POSITION_KEY)).getTime(); tv_time.setText(time); } } private String getDate(int year,int month,int day){ String date=""; date+=year; if(month<9){ date=date+"0"+(month+1); }else{ date+=(month+1); } if(day<10){ date=date+"0"+day; }else { date+=day; } return date; } @Override public void onClick(View v) { switch (v.getId()) { case R.id.tv_save: if(type==GlobalParams.TYPE_EDIT){ update(); }else { save(); } break; case R.id.tv_date: selectDateDialog(); break; case R.id.tv_time: selectTimeDialog(); break; case R.id.tv_cancel: finish(); break; } } private void selectDateDialog(){ Calendar c = Calendar.getInstance(); int year=c.get(Calendar.YEAR); final int month=c.get(Calendar.MONTH)+1; int day=c.get(Calendar.DAY_OF_MONTH); new DatePickerDialog(AddContentActivity.this, new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { date=getDate(year,monthOfYear,dayOfMonth); tv_date.setText(date); } },year,month,day).show(); } private void selectTimeDialog() { Calendar c = Calendar.getInstance(); int mHour = c.get(Calendar.HOUR_OF_DAY); int mMinute = c.get(Calendar.MINUTE); new TimePickerDialog(AddContentActivity.this, new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { time=formatTime(hourOfDay,minute); tv_time.setText(time); } }, mHour, mMinute, true).show(); } private String formatTime(int hour,int minute){ String time=hour+":"; if(minute<10){ time=time+"0"+minute; }else{ time+=minute; } return time; } private void save() { String content = et_content.getText().toString(); if ("".equals(content)) { Toast.makeText(AddContentActivity.this, "請輸入內容", Toast.LENGTH_SHORT).show(); return; } if ("".equals(time)) { Toast.makeText(AddContentActivity.this, "請選擇時間", Toast.LENGTH_SHORT).show(); return; } NotepadBean notepadBean = new NotepadBean(); notepadBean.setContent(content); notepadBean.setDate(Integer.parseInt(date)); notepadBean.setTime(time); DataHelper helper = new DataHelper(AddContentActivity.this); helper.insertData(notepadBean); setResult(GlobalParams.ADD_RESULT_OK); finish(); } private void update(){ DataHelper helper=new DataHelper(AddContentActivity.this); NotepadWithDataBean bean=(NotepadWithDataBean)(bundle.getSerializable(GlobalParams.BEAN_KEY)); int itemPosition=bundle.getInt(GlobalParams.ITEM_POSITION_KEY); helper.update(bean.getNotepadBeenList().get(itemPosition).getId(),date,time,et_content.getText().toString()); setResult(GlobalParams.ADD_RESULT_OK); finish(); } }
RemindActivity.java代碼:
package siso.smartnotef.activity; import android.media.MediaPlayer; import android.media.RingtoneManager; import android.net.Uri; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.TextView; import java.io.IOException; import siso.smartnotef.R; import siso.smartnotef.global.GlobalParams; public class RemindActivity extends AppCompatActivity { private TextView tv_content; private Button bt_confirm; private MediaPlayer mMediaPlayer;; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_remind); findViews(); setListeners(); Bundle bundle=getIntent().getExtras(); String content=bundle.getString(GlobalParams.CONTENT_KEY); tv_content.setText(content); playSound(); } private void findViews(){ tv_content=(TextView)findViewById(R.id.tv_content); bt_confirm=(Button) findViewById(R.id.bt_confirm); } private void setListeners(){ bt_confirm.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(null!=mMediaPlayer){ mMediaPlayer.stop(); finish(); } } }); } public void playSound() { new Thread(new Runnable() { @Override public void run() { mMediaPlayer = MediaPlayer.create(RemindActivity.this, getSystemDefultRingtoneUri()); mMediaPlayer.setLooping(true);//設置循環 try { mMediaPlayer.prepare(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } mMediaPlayer.start(); } }).start(); } //獲取系統默認鈴聲的Uri private Uri getSystemDefultRingtoneUri() { return RingtoneManager.getActualDefaultRingtoneUri(RemindActivity.this, RingtoneManager.TYPE_RINGTONE); } }
activity_main.xml內容:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="siso.smartnotef.activity.MainActivity"> <RelativeLayout android:layout_width="match_parent" android:layout_height="50dp" android:background="@color/title_color" android:paddingLeft="10dp" android:paddingRight="10dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/white" android:textSize="18sp" android:layout_centerInParent="true" android:text="智能記事本"/> <TextView android:id="@+id/tv_add" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/white" android:text="新增" android:layout_centerVertical="true" android:layout_alignParentRight="true" android:textSize="13sp"/> </RelativeLayout> <ListView android:id="@+id/lv_content" android:layout_width="match_parent" android:layout_height="wrap_content"></ListView> </LinearLayout>
activity_add_content.xml內容:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_add_content" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="siso.smartnotef.activity.AddContentActivity"> <RelativeLayout android:layout_width="match_parent" android:layout_height="50dp" android:background="@color/title_color" android:paddingLeft="10dp" android:paddingRight="10dp"> <TextView android:id="@+id/tv_cancel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:text="取消" android:textColor="@color/white"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/white" android:textSize="18sp" android:layout_centerInParent="true" android:text="智能記事本"/> <TextView android:id="@+id/tv_save" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/white" android:text="保存" android:layout_centerVertical="true" android:layout_alignParentRight="true" /> </RelativeLayout> <LinearLayout android:layout_marginTop="10dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_gravity="center_horizontal"> <TextView android:id="@+id/tv_date" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="5dp" android:text="今天"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=" -- "/> <TextView android:id="@+id/tv_time" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="5dp" android:text="請選擇時間" /> </LinearLayout> <EditText android:id="@+id/et_content" android:layout_marginTop="10dp" android:layout_width="match_parent" android:layout_height="match_parent" android:inputType="textMultiLine" android:gravity="left|top" android:layout_margin="20dp" android:padding="10dp" android:hint="請輸入內容" android:background="@drawable/edit_back"/> </LinearLayout>
activity_remind.xml內容:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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" android:background="@color/white" android:orientation="vertical" tools:context="siso.smartnotef.activity.RemindActivity"> <TextView android:id="@+id/tv_content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" /> <Button android:id="@+id/bt_confirm" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:text="取消" /> </LinearLayout>
AndroidManifest.xml內容:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="siso.smartnotef"> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/Theme.AppCompat.Light.NoActionBar"> <activity android:name=".activity.MainActivity" android:theme="@style/Theme.AppCompat.Light.NoActionBar"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name=".receiver.MainReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver> <activity android:name=".activity.AddContentActivity" /> <service android:name=".service.MainService" android:enabled="true" android:exported="true" /> <activity android:name=".activity.RemindActivity" ></activity> </application> </manifest>
項目結構如圖:
項目運行結果如圖:
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持本站。
MVP 在 Android 上的使用其實已經流行了有挺長的一段時間,包括我們公司,經過我們Android端小伙伴們的思考與才華 我們的產品也是采取的MVP模式。今天主要是
package com.example.baidulocdemo_2;import com.baidu.location.BDLocationListener;impor
要實現的效果如下考慮到關鍵是動畫效果,所以直接繼承View。不過CheckBox的超類CompoundButton實現了Checkable接口,這一點值得借鑒。下面記錄一
碰到幾個問題,記錄一下,方便其他網友查詢 我是win7,64位系統,JAVA以前裝過,所以沒有安裝JDK直接下載Android Studio進行安裝,結果提示沒有安裝