本次笔记将记录在项目中增添页面转换及Intent和Bundle方法的数据传递,新增系统设置界面,并使用preference方法存储新增页面输入的内容。

先创建Book类,使之可序列化,进行Bundle方式的数据传递,代码:

import java.io.Serializable;

public class Book implements Serializable {
    public String bid;
    public String bname;
    public String author;
    public String local;
}

设置新增图书页面的布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    <TextView
        android:id="@+id/menu"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:text="新增图书"
        android:textSize="35dp"
        android:textColor="#000"
        android:background="#6CF">
    </TextView>
    <RelativeLayout
        android:id="@+id/Btn1"
        android:layout_below="@id/menu"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dip"
        android:layout_centerHorizontal="true"
        android:orientation="vertical">
        <TextView
            android:id="@+id/textview_number1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="图书编号:"
            android:layout_alignParentLeft="true"
            android:textColor="#000000"
            android:textSize="23dip" />
        <EditText
            android:id="@+id/book_number1"
            android:layout_width="200dip"
            android:layout_height="wrap_content"
            android:inputType="text"
            android:layout_marginLeft="110dp"
            android:textColor="#000000"/>
    </RelativeLayout>
    <RelativeLayout
        android:id="@+id/Btn2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/menu"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="55dip">
        <TextView
            android:id="@+id/textview_name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="图书名称:"
            android:layout_alignParentLeft="true"
            android:textColor="#000000"
            android:textSize="23dip" />
        <EditText
            android:id="@+id/book_name1"
            android:layout_width="200dip"
            android:layout_height="wrap_content"
            android:inputType="text"
            android:layout_marginLeft="110dp"
            android:textColor="#000000"/>
    </RelativeLayout>
    <RelativeLayout
        android:id="@+id/Btn3"
        android:layout_below="@id/menu"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="90dip">
        <TextView
            android:id="@+id/author_name3"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="作者姓名:"
            android:layout_alignParentLeft="true"
            android:textColor="#000000"
            android:textSize="23dip" />
        <EditText
            android:id="@+id/author_name4"
            android:layout_width="200dip"
            android:layout_height="wrap_content"
            android:inputType="text"
            android:layout_marginLeft="110dp"
            android:textColor="#000000"/>
    </RelativeLayout>
        <TableLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="180dp"
            android:layout_centerHorizontal="true">
            <TableRow>
                <Button
                    android:id="@+id/increace"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="新增一行到数据库"
                    android:textSize="25px"
                    android:layout_weight="1"/>
                <Button
                    android:id="@+id/increace1"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="新增到数据库"
                    android:textSize="35px"/>
            </TableRow>
        </TableLayout>
    </RelativeLayout>

    <Button
        android:layout_gravity="center"
        android:id="@+id/save"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="保存数据"
        android:textSize="35px"/>
</LinearLayout>

新增系统页面设置代码如下:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <PreferenceCategory
        android:title="系统设置">
        <EditTextPreference
            android:title="昵称"
            android:key="nicheng"/>
        <SwitchPreference
            android:title="自启动"
            android:key="auto"/>
    </PreferenceCategory>
</PreferenceScreen>

对应系统页面的java代码如下

import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.EditTextPreference;
import android.preference.PreferenceActivity;

public class Setting extends PreferenceActivity {
    public void onCreate(Bundle saveInstence) {
        super.onCreate(saveInstence);
        addPreferencesFromResource(R.xml.setting);
        SharedPreferences sp = getSharedPreferences("tes",Setting.MODE_PRIVATE);
        SharedPreferences.Editor editor = sp.edit();
        String nicheng = sp.getString("nicheng","");
        EditTextPreference etp = (EditTextPreference) findPreference("nicheng");
        etp.setText(nicheng);
        editor.putString("key1",etp.toString());
        editor.commit();
    }
}

希望点击软件先进入首页界面,首页布局文件如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/menu"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:text="首页"
        android:textSize="35dp"
        android:textColor="#000"
        android:background="#6CF">
    </TextView>
    <TableLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center">
        <TableRow>
            <Button
                android:id="@+id/search"
                android:layout_width="100dp"
                android:layout_height="wrap_content"
                android:text="查询"
                android:textColor="#fff"
                android:textSize="30dp">
            </Button>

            <Button
                android:id="@+id/newly"
                android:layout_width="100dp"
                android:layout_height="wrap_content"
                android:text="新增"
                android:textColor="#fff"
                android:textSize="30dp">
            </Button>
        </TableRow>
    </TableLayout>
</LinearLayout>

相应的java文件:

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class Home_Page extends Activity {
    private Button search;
    private Button newly;
    static int A;
    private Button setting;

    public void onCreate(Bundle saveInstanceState) {
        super.onCreate(saveInstanceState);
        setContentView(R.layout.home_page);
        onClick l = new onClick(this);
        search = (Button)findViewById(R.id.search);
        newly = (Button)findViewById(R.id.newly);
        search.setOnClickListener(l);
        newly.setOnClickListener(l);


        if(A!=0) {

//        Intent i = getIntent();
//        String message = i.getStringExtra("a1")+","+i.getStringExtra("a2")+","+i.getStringExtra("a3");
//        Toast.makeText(this,message,Toast.LENGTH_SHORT).show();
            Intent intent = getIntent();
            Bundle bundle = intent.getBundleExtra("b1");
            Book book = (Book) bundle.getSerializable("a1");
            String message1 = book.bid + "," + book.bname + "," + book.author;
            Toast.makeText(this, message1, Toast.LENGTH_LONG).show();
        }
    }
    public boolean onCreateOptionsMenu(android.view.Menu menu){
        menu.add(0,1,0,"关于");
        menu.add(0,2,0,"退出");
        menu.add(0,3,0,"").setIcon(R.mipmap.ic_setting);
        return true;
    }
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case 1:
                AlertDialog.Builder a = new AlertDialog.Builder(Home_Page.this);
                a.setTitle("关于1.0版本");
                a.setMessage("2020.10.11 第一次更新 \n 内容:增添菜单栏 \n2020.10.15 第二次更新 \n 内容:增添“清空”属性 \n2020.10.22 " +
                        "第三次更新 \n 内容:增添页面转换及Intent和Bundle方法的数据传递 \n2020.10.30  第四次更新 \n 内容:选项菜单中增添系统选项,并跳转到可输入及选择的系统界面 \n " +
                        "新增页面输入的数据以Preference的方式存储起来 \n");
                a.setPositiveButton("OK",null);
                a.create();
                a.show();
                break;
            case 2:
                this.finish();
                break;
            case 3:
                Intent intent = new Intent(this,Setting.class);
                startActivity(intent);
        }
        return true;
    }
}
  1. 这里做了一些调整,把原本在查询界面的选项菜单搬了过来,但是不知道为什么目前还存在的一个bug就是当我希望case3能显示我放进去的图片,总是显示不粗来,过段时间再来深究。
  2. 并且调整了一下这里的代码,首页里点击查询可跳转到查询界面,查询界面点击返回可跳转回首页,在查询界面增添如下代码;
private Button bq;
  bq = (Button)findViewById(R.id.btn3);
  bq.setOnClickListener(l);

新增图书页面布局文件如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    <TextView
        android:id="@+id/menu"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:text="新增图书"
        android:textSize="35dp"
        android:textColor="#000"
        android:background="#6CF">
    </TextView>
    <RelativeLayout
        android:id="@+id/Btn1"
        android:layout_below="@id/menu"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dip"
        android:layout_centerHorizontal="true"
        android:orientation="vertical">
        <TextView
            android:id="@+id/textview_number1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="图书编号:"
            android:layout_alignParentLeft="true"
            android:textColor="#000000"
            android:textSize="23dip" />
        <EditText
            android:id="@+id/book_number1"
            android:layout_width="200dip"
            android:layout_height="wrap_content"
            android:inputType="text"
            android:layout_marginLeft="110dp"
            android:textColor="#000000"/>
    </RelativeLayout>
    <RelativeLayout
        android:id="@+id/Btn2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/menu"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="55dip">
        <TextView
            android:id="@+id/textview_name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="图书名称:"
            android:layout_alignParentLeft="true"
            android:textColor="#000000"
            android:textSize="23dip" />
        <EditText
            android:id="@+id/book_name1"
            android:layout_width="200dip"
            android:layout_height="wrap_content"
            android:inputType="text"
            android:layout_marginLeft="110dp"
            android:textColor="#000000"/>
    </RelativeLayout>
    <RelativeLayout
        android:id="@+id/Btn3"
        android:layout_below="@id/menu"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="90dip">
        <TextView
            android:id="@+id/author_name3"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="作者姓名:"
            android:layout_alignParentLeft="true"
            android:textColor="#000000"
            android:textSize="23dip" />
        <EditText
            android:id="@+id/author_name4"
            android:layout_width="200dip"
            android:layout_height="wrap_content"
            android:inputType="text"
            android:layout_marginLeft="110dp"
            android:textColor="#000000"/>
    </RelativeLayout>
        <TableLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="180dp"
            android:layout_centerHorizontal="true">
            <TableRow>
                <Button
                    android:id="@+id/increace"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="新增一行到数据库"
                    android:textSize="25px"
                    android:layout_weight="1"/>
                <Button
                    android:id="@+id/increace1"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="新增到数据库"
                    android:textSize="35px"/>
            </TableRow>
        </TableLayout>
    </RelativeLayout>

    <Button
        android:layout_gravity="center"
        android:id="@+id/save"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="保存数据"
        android:textSize="35px"/>
</LinearLayout>

相应java文件如下,可实现从首页跳转过来,点击任意一个“新增xx”键可跳转回首页,并显示内容:

package com.example.bookcollection;

import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

/**
 * Created by Administrator on 2020/10/22.
 */
public class Newly extends Activity {
    private Button increace;
    private Button increace1;
    private Button save;
    public void onCreate(Bundle saveInstanceState) {
        super.onCreate(saveInstanceState);
        setContentView(R.layout.newly);
        increace = (Button)findViewById(R.id.increace);
        increace1 = (Button)findViewById(R.id.increace1);
        onClick lll= new onClick(this);
        increace.setOnClickListener(lll);
        increace1.setOnClickListener(lll);

        save = (Button) findViewById(R.id.save);
        save.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                EditText e1 = (EditText) findViewById(R.id.book_number1);
                EditText e2 = (EditText) findViewById(R.id.book_name1);
                EditText e3 = (EditText) findViewById(R.id.author_name4);
                SharedPreferences sp = getSharedPreferences("test",Newly.MODE_PRIVATE);
                SharedPreferences.Editor editor = sp.edit();
                editor.putString("key1",e1.getText().toString());
                editor.putString("key2",e2.getText().toString());
                editor.putString("key3",e3.getText().toString());
                editor.commit();
            }
        });
    }
}

onClick承担监听控件被点击后作出,页面跳转(权力交接)任务,新增内容如下:

if (v.getId()==R.id.btn3) {
            Intent i = new Intent();
            i.setClass(a,Home_Page.class);
            a.startActivity(i);
        }
        if (v.getId()==R.id.search) {
            Intent i = new Intent();
            i.setClass(a,BookCollection.class);
            a.startActivity(i);
        }
        if (v.getId()==R.id.newly) {
            Intent i = new Intent();
            i.setClass(a,Newly.class);
            a.startActivity(i);
        }
        if (v.getId()==R.id.increace) {
            Intent i = new Intent(a,Home_Page.class);
            EditText e1 = (EditText) a.findViewById(R.id.book_number1);
            EditText e2 = (EditText) a.findViewById(R.id.book_name1);
            EditText e3 = (EditText) a.findViewById(R.id.author_name4);
            i.putExtra("a1",e1.getText().toString());
            i.putExtra("a2",e2.getText().toString());
            i.putExtra("a3",e3.getText().toString());
            a.startActivity(i);
        }
        if (v.getId()==R.id.increace1) {
            Home_Page.A = 1;
            Intent i = new Intent(a,Home_Page.class);
            EditText e1 = (EditText) a.findViewById(R.id.book_number1);
            EditText e2 = (EditText) a.findViewById(R.id.book_name1);
            EditText e3 = (EditText) a.findViewById(R.id.author_name4);
            Book book = new Book();
            book.bid = e1.getText().toString();
            book.bname = e2.getText().toString();
            book.author = e3.getText().toString();
            Bundle bundle = new Bundle();
            bundle.putSerializable("a1", book);
            i.putExtra("b1",bundle);
            a.startActivity(i);
        }

*补充:*之前有弄不懂为什么有时候某些控件会显示不出来需要先检查:

  1. 上一个控件的长宽是“match_parent”还是“wrap_content”。(遇到布局和自己想要的效果不一样,也可以多推理一下这些的逻辑
  2. 或者在最外层布局中增添一句话 android:orientation="vertical"
  3. 上次增添菜单的时候,出现问题,必须要try{ }catch(){ },抛出异常语句才能正常进行,就是因为如下代码
Intent intent = getIntent();
            Bundle bundle = intent.getBundleExtra("b1");
            Book book = (Book) bundle.getSerializable("a1");
            String message1 = book.bid + "," + book.bname + "," + book.author;
            Toast.makeText(this, message1, Toast.LENGTH_LONG).show();

出现了下面这个错误java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.Serializable android.os.Bundle.getSerializable(java.lang.String)' on a null object reference(Activity之间传送对象Bundle为null的问题),但是本人笨拙,只是跟着本学期的课程学习java,所以选择了设置判断(判断静态A的值)。正好这周老师多次强调四种类型变量的情况,尝试过几次最后选择,在Home_Page.class中加入语句 static int A;在onClick.class中调用这个静态变量,加上语句Home_Page.A=1;(private只能在本包内可访问,我定义变量语句是定义为默认,默认状态下第三方类同包可访问,好啦顺便把java的知识复习了一下。)