首页 > 其他分享 >Android开发_记事本(4)

Android开发_记事本(4)

时间:2023-04-10 19:34:30浏览次数:41  
标签:putExtra tag content 开发 intent Android id 记事本 android

BaseActivity

用作大多数页面的父类

 package com.example.note;
 ​
 //用来当作大多是activity的super class
 ​
 ​
 import static android.provider.ContactsContract.Intents.Insert.ACTION;
 ​
 import android.app.StatusBarManager;
 import android.content.BroadcastReceiver;
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.os.Bundle;
 import android.util.TypedValue;
 ​
 import androidx.appcompat.app.AppCompatActivity;
 import androidx.core.content.ContextCompat;
 ​
 public class BaceActivity extends AppCompatActivity{
     @Override
     protected void onCreate(Bundle saveInstanceState){
         super.onCreate(saveInstanceState);
         setNightMode();
 ​
    }
     public void setNightMode(){
 ​
             setTheme(R.style.DayTheme);
 ​
    }
 ​
 }

 

自定义状态栏

toolbar

首先必须导入最新版本的toolbar包(androidx的)

 import androidx.appcompat.widget.Toolbar;

在mainActivity中

 //Toolbar
 myToolbar = findViewById(R.id.myToolbar);
 setSupportActionBar(myToolbar);
 getSupportActionBar().setHomeButtonEnabled(true);
  //设置toolbar取代actionbar(自定义的工具栏代替原本的活动栏
 getSupportActionBar().setDisplayHomeAsUpEnabled(true);  

‘在activity_main中

 <androidx.appcompat.widget.Toolbar
     android:id="@+id/myToolbar"
     android:layout_width="match_parent"
     android:layout_height="100dp"
     ></androidx.appcompat.widget.Toolbar>

为了更加美观:

 <androidx.appcompat.widget.Toolbar
     android:id="@+id/myToolbar"
     android:layout_width="match_parent"
     android:layout_height="?attr/actionBarSize"
     android:background="?attr/colorPrimary"
     android:elevation="4dp"
     app:titleTextColor="?attr/titleColor"
     android:theme="?attr/toolbarTheme"
     app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
     
 </androidx.appcompat.widget.Toolbar>

 

效果:

 

 

此时点击任何东西还是没反应的,后期可以设置

主界面的笔记栏可点击并修改其内容

首先要实现一个接口,

 public class MainActivity extends BaceActivity implements AdapterView.OnItemClickListener 

并且这个接口要求必须实现以下function

 @Override
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
         Note currNote = (Note) parent.getItemAtPosition(position);
         Intent intent = new Intent(MainActivity.this,EditActivity.class);   //from...to...
         intent.putExtra("content", currNote.getContent());                          //intent相当于一个信道,putExtra相当于向里面传送一个名为参数一,内容为参数二的信息,接收方通过参数一相同的名称来接受参数二内容
         intent.putExtra("id",currNote.getId());
         intent.putExtra("time",currNote.getTime());
         intent.putExtra("mode",3);
         intent.putExtra("tag",currNote.getTag());
         startActivityForResult(intent,1);
    }

 

EditActivity中

设置intent内容’

  private String old_content = "";
private String old_time = "";
private int old_Tag = 1;
private long id = 0;
private int openMode = 0;
private int tag = 1;


Intent getintent = getIntent(); //获取其他地方传来的“信道”intent
int openMode = getintent.getIntExtra("mode",0); //获取intent中的整数信息

if(openMode == 3){ //打开已存在的note
id = getIntent().getLongExtra("id",0);
old_content = getIntent().getStringExtra("content");
old_time = getIntent().getStringExtra("time");
old_Tag = getIntent().getIntExtra("tag",1);
et.setText(old_content);
et.setSelection(old_content.length());//设置光标位置到最后

MainActivity中

还要给ListView设置上ClickListener

lv.setOnClickListener(this);

此时的效果

可以点击并打开之前的笔记并修改,但是修改之后原笔记内容没有改变:

 

 

修改后返回:

 

 

这是因为我们还没有接受返回的信息,修改后并没有改变原来的笔记内容

我们要做的是:把修改后的笔记内容输出回原来的地方,并且更新页面

 

在MainActivity中

之前一开始新建笔记时设置的模式值为3:

public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
switch (parent.getId()){
case R.id.lv:
Note currNote = (Note) parent.getItemAtPosition(position); //通过position的信息获取item,position为点击的位置
Intent intent = new Intent(MainActivity.this,EditActivity.class); //from...to...
intent.putExtra("content", currNote.getContent()); //intent相当于一个信道,putExtra相当于向里面传送一个名为参数一,内容为参数二的信息,接收方通过参数一相同的名称来接受参数二内容
intent.putExtra("id",currNote.getId());
intent.putExtra("time",currNote.getTime());
intent.putExtra("mode",3);
intent.putExtra("tag",currNote.getTag());
startActivityForResult(intent,1);
break;
}

我们将修改笔记的mode值设置为4,与之前的区分开

intent.putExtra("mode",4);          //将mode值设置为4,新建笔记

在EditActivity

在之前的点击返回后执行的内容中加入 autosetMessage

else if(keyCode == KeyEvent.KEYCODE_BACK){
autoSetMessage();//根据mode值判断返回什么东西
Intent intent = new Intent();//只用来传输信息,不用来跳转
intent.putExtra("content",et.getText().toString());//传回一个名为content的intent
intent.putExtra("time",dateToStr());
setResult(RESULT_OK,intent);
finish(); //结束当前Activity,回到MainActivity
return true;
}



public void autoSetMessage(){
if(openMode == 4){ //我们新建的笔记
if(et.getText().toString().length() == 0){ //编辑栏内容为0,什么也没写
intent.putExtra("mode", -1); //nothing new happens.
}
else{
intent.putExtra("mode", 0); // new one note;
intent.putExtra("content", et.getText().toString());
intent.putExtra("time", dateToStr());
intent.putExtra("tag", tag);
}
}
else if(openMode == 3){
if (et.getText().toString().equals(old_content) && !tagChange) //内容等于之前且标签没有修改
intent.putExtra("mode", -1); // edit nothing
else {
intent.putExtra("mode", 1); //edit the content //修改了内容
intent.putExtra("content", et.getText().toString());
intent.putExtra("time", dateToStr());
intent.putExtra("id", id); //修改笔记时必须保持id一致,不然修改的就是其他笔记了
intent.putExtra("tag", tag);
}
}
}

EditActivity会传回一些信息,所以要继续完善MainActivity接受的内容

实现可点击并修改

MainActivity中

上面的EditActivity中设置了如果什么也没做,mode返回-1,修改返回0,更新返回1,于是在MainActivity中做出如下添加

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

int returnMode;
long note_Id;
returnMode = data.getExtras().getInt("mode", -1);
note_Id = data.getExtras().getLong("id", 0);


if (returnMode == 1) { //update current note

String content = data.getExtras().getString("content");
String time = data.getExtras().getString("time");
int tag = data.getExtras().getInt("tag", 1);

Note newNote = new Note(content, time, tag);
newNote.setId(note_Id);
CRUD op = new CRUD(context);
op.open();
op.updateNote(newNote);
op.close();
} else if (returnMode == 0) { // create new note
String content = data.getExtras().getString("content");
String time = data.getExtras().getString("time");
int tag = data.getExtras().getInt("tag", 1);

Note newNote = new Note(content, time, tag);
CRUD op = new CRUD(context);
op.open();
op.addNote(newNote);
op.close();
} else {

}
refreshListView();
super.onActivityResult(requestCode, resultCode, data);

}

此时达到了点击进入并修改的目的

最后给EditActivity也设置toolbar

复制MainActivity中相关内容即可

 

 

标签:putExtra,tag,content,开发,intent,Android,id,记事本,android
From: https://www.cnblogs.com/zsc02/p/17304067.html

相关文章

  • Android开发_记事本(5)
    菜单栏在res目录下新建文件夹menu,并在该目录下新建main_menu.xml  若要在栏里面加图片则需要引入drawable中的东西新建矢量图菜单栏按钮    再新建主页面删除所有按钮和编辑界面的删除当前笔记的按钮  main_menu <?xmlversion="1.0"encoding="utf......
  • Qt for Android QtQuick应用程序 USB连接手机调试运行错误:adb: failed to *.apk: No s
    1.场景Windows11、Qt6.5.0QtQuick应用程序USB连接手机调试运行。2.错误信息adb:failedto*.apk:NosuchfileordirectoryInstallingtodevicefailed!进程"C:\Users\Administrator\Qt\6.5.0\mingw_64\bin\androiddeployqt.exe"退出,退出代码16。安装应用失败,发生未知错......
  • Android开发_记事本(2)数据库
    APP中的数据库知识点ListViewhttps://blog.csdn.net/indeedes/article/details/119530068开发过程需求可以写并保存多个输入的笔记内容按照一定顺序显示出来如果屏幕不够可以下拉输入的内容可以增删改查APP核心:ListViewListView简介在Android开发中,ListView是一个比......
  • Android开发_记事本(1)
    一些知识TextviewTextView中有下述几个属性:id:为TextView设置一个组件id,根据id,我们可以在Java代码中通过findViewById()的方法获取到该对象,然后进行相关属性的设置,又或者使用RelativeLayout时,参考组件用的也是id!layout_width:组件的宽度,一般写:wrap_content或者match_parent......
  • odoo 后台开发(问题)
    1.Views视图button按钮属性type:主要使用action和objectobject:指定name="模型函数"action:指定name="%(record的id)d"context:传入上下文参数,如设置context="{'active_id':id}"则可以在模型文件使用环境上下文获取传入的值active_id=self.env.cont......
  • 2023很火的手机记事本APP
    在经济高速发展的今天,对于职场人士来说,时间是非常宝贵的,所以我们在工作中要时刻保持高效,能够准确的处理各种事项和工作任务。那么当工作中有很多信息需要记录、管理的时候,当有各种各样工作任务需要完成的时候,职场人士应该如何快速记录下来这些内容呢?  在2023年越来越多......
  • 可视化开发工具打破信息孤岛,提质又增效!
    相信在很长的一段时间内,信息孤岛、部门之间缺乏协作、数据难以整理等问题,都是很多企业在办公过程中遇到的常见问题。随着信息技术的发展,办公高效自动化已经成为无纸化办公的发展趋势了,应用可视化开发工具可以摒除这些缺陷,助力企业办公提质又增效。1、关于可视化开发工具什么是可......
  • vite 开发按需引入的组件库 rollup
    转载:https://blog.csdn.net/qq_27314517/article/details/128675552package.json{"name":"...","private":false,"version":"0.1.9","main":"./lib/index.umd.js","module&......
  • 一站式开发平台 加速企业数字化发展
    协同办公平台、经营管理平台、生产控制平台、数字决策支持体系……当前,新一轮科技革命方兴未艾,以数字技术为基座的数字化,正颠覆、重构着千行百业。数字化转型是信息技术引发的系统性变革,涉及单一应用、集成化、平台化、数据化、数智化等过程,需要循序渐进、持之以恒。但实际上,大部分......
  • 7年测试,从功能测试到测试开发,我总算证明了自己
    ​ 我感觉我是一个比较有发言权的人吧,我在测试行业爬模滚打7年,从点点点的功能测试到现在成为测试开发工程师,工资也翻了几个人觉得,测试的前景并不差,只要自己肯努力;我刚出来的时候是在鹅厂做外包的功能测试,天天点点点,很悠闲,点了两年,发觉这样下去会废,然后就开始学习python,java,学着......