Android开发_记事本(4)

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中相关内容即可

posted @ 2023-04-10 19:27  张少春02  阅读(22)  评论(0编辑  收藏  举报
Title