MIUI Note 研究笔记之 TextUtils


对于字符串处理Android为我们提供了一个简单实用的TextUtils类,如果处理比较简单的内容不用去思考正则表达式不妨试试这个在android.text.TextUtils的类,主要的功能如下:

 是否为空字符 static boolean  isEmpty(CharSequence str) 

仔细读官方的API: Returns true if the string is null or 0-length. 因为你从EditText返回的是一个变量。如果这个变量本身为null值,那么你掉它的equals方法是要报错的。但是如果你调用TextUtils.isEmpty() 把这个变量作为参数传进去。只要这个参数为空或者为“”,都会返回真。所以,用官方给的更加严谨。


以下是一个简单的安卓笔记app的代码示例,包含了添加笔记、编辑笔记、删除笔记和查看笔记的功能: MainActivity.java ``` import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { ListView notesListView; ArrayList<String> notesList; ArrayAdapter<String> adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); notesListView = findViewById(R.id.notes_list_view); notesList = new ArrayList<>(); adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, notesList); notesListView.setAdapter(adapter); notesListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { editNoteDialog(i); } }); } public void addNoteDialog(View view) { AddNoteDialog dialog = new AddNoteDialog(); dialog.show(getSupportFragmentManager(), "addNoteDialog"); dialog.setOnDialogCloseListener(new AddNoteDialog.OnDialogCloseListener() { @Override public void onDialogClose(String note) { notesList.add(note); adapter.notifyDataSetChanged(); } }); } public void editNoteDialog(final int position) { EditNoteDialog dialog = new EditNoteDialog(); Bundle bundle = new Bundle(); bundle.putString("note", notesList.get(position)); dialog.setArguments(bundle); dialog.show(getSupportFragmentManager(), "editNoteDialog"); dialog.setOnDialogCloseListener(new EditNoteDialog.OnDialogCloseListener() { @Override public void onDialogClose(String note) { notesList.set(position, note); adapter.notifyDataSetChanged(); } }); } public void deleteNoteDialog(View view) { DeleteNoteDialog dialog = new DeleteNoteDialog(); dialog.show(getSupportFragmentManager(), "deleteNoteDialog"); dialog.setOnDialogCloseListener(new DeleteNoteDialog.OnDialogCloseListener() { @Override public void onDialogClose(boolean delete) { if (delete) { int position = notesListView.getCheckedItemPosition(); if (position != ListView.INVALID_POSITION) { notesList.remove(position); adapter.notifyDataSetChanged(); Toast.makeText(getApplicationContext(), "Note deleted", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(getApplicationContext(), "Please select a note to delete", Toast.LENGTH_SHORT).show(); } } } }); } } ``` activity_main.xml ``` <?xml version="1.0" encoding="utf-8"?> <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" android:padding="16dp" tools:context=".MainActivity"> <Button android:id="@+id/add_note_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Add Note" android:onClick="addNoteDialog"/> <Button android:id="@+id/edit_note_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Edit Note" android:layout_toRightOf="@id/add_note_button" android:layout_marginLeft="8dp" android:onClick="editNoteDialog"/> <Button android:id="@+id/delete_note_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Delete Note" android:layout_toRightOf="@id/edit_note_button" android:layout_marginLeft="8dp" android:onClick="deleteNoteDialog"/> <ListView android:id="@+id/notes_list_view" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/add_note_button"/> </RelativeLayout> ``` AddNoteDialog.java ``` import android.app.Dialog; import android.content.DialogInterface; import android.os.Bundle; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.widget.Button; import android.widget.EditText; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatDialogFragment; public class AddNoteDialog extends AppCompatDialogFragment { private EditText noteEditText; private Button addButton, cancelButton; private OnDialogCloseListener onDialogCloseListener; @NonNull @Override public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); LayoutInflater inflater = getActivity().getLayoutInflater(); View view = inflater.inflate(R.layout.dialog_add_note, null); noteEditText = view.findViewById(R.id.note_edit_text); addButton = view.findViewById(R.id.add_button); cancelButton = view.findViewById(R.id.cancel_button); addButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String note = noteEditText.getText().toString(); if (!TextUtils.isEmpty(note)) { onDialogCloseListener.onDialogClose(note); dismiss(); } } }); cancelButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { dismiss(); } }); builder.setView(view); return builder.create(); } public void setOnDialogCloseListener(OnDialogCloseListener onDialogCloseListener) { this.onDialogCloseListener = onDialogCloseListener; } public interface OnDialogCloseListener { void onDialogClose(String note); } } ``` dialog_add_note.xml ``` <?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="wrap_content" android:orientation="vertical" android:padding="16dp"> <EditText android:id="@+id/note_edit_text" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Enter note"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="end" android:layout_marginTop="16dp"> <Button android:id="@+id/add_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Add"/> <Button android:id="@+id/cancel_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Cancel" android:layout_marginLeft="16dp"/> </LinearLayout> </LinearLayout> ``` EditNoteDialog.java ``` import android.app.Dialog; import android.content.DialogInterface; import android.os.Bundle; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.widget.Button; import android.widget.EditText; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatDialogFragment; public class EditNoteDialog extends AppCompatDialogFragment { private EditText noteEditText; private Button saveButton, cancelButton; private OnDialogCloseListener onDialogCloseListener; @NonNull @Override public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); LayoutInflater inflater = getActivity().getLayoutInflater(); View view = inflater.inflate(R.layout.dialog_edit_note, null); noteEditText = view.findViewById(R.id.note_edit_text); saveButton = view.findViewById(R.id.save_button); cancelButton = view.findViewById(R.id.cancel_button); Bundle bundle = getArguments(); if (bundle != null) { String note = bundle.getString("note"); noteEditText.setText(note); } saveButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String note = noteEditText.getText().toString(); if (!TextUtils.isEmpty(note)) { onDialogCloseListener.onDialogClose(note); dismiss(); } } }); cancelButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { dismiss(); } }); builder.setView(view); return builder.create(); } public void setOnDialogCloseListener(OnDialogCloseListener onDialogCloseListener) { this.onDialogCloseListener = onDialogCloseListener; } public interface OnDialogCloseListener { void onDialogClose(String note); } } ``` dialog_edit_note.xml ``` <?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="wrap_content" android:orientation="vertical" android:padding="16dp"> <EditText android:id="@+id/note_edit_text" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Enter note"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="end" android:layout_marginTop="16dp"> <Button android:id="@+id/save_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Save"/> <Button android:id="@+id/cancel_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Cancel" android:layout_marginLeft="16dp"/> </LinearLayout> </LinearLayout> ``` DeleteNoteDialog.java ``` import android.app.Dialog; import android.content.DialogInterface; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.widget.Button; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatDialogFragment; public class DeleteNoteDialog extends AppCompatDialogFragment { private Button deleteButton, cancelButton; private OnDialogCloseListener onDialogCloseListener; @NonNull @Override public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); LayoutInflater inflater = getActivity().getLayoutInflater(); View view = inflater.inflate(R.layout.dialog_delete_note, null); deleteButton = view.findViewById(R.id.delete_button); cancelButton = view.findViewById(R.id.cancel_button); deleteButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { onDialogCloseListener.onDialogClose(true); dismiss(); } }); cancelButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { dismiss(); } }); builder.setView(view); return builder.create(); } public void setOnDialogCloseListener(OnDialogCloseListener onDialogCloseListener) { this.onDialogCloseListener = onDialogCloseListener; } public interface OnDialogCloseListener { void onDialogClose(boolean delete); } } ``` dialog_delete_note.xml ``` <?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="wrap_content" android:orientation="vertical" android:padding="16dp"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Are you sure you want to delete this note?"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="end" android:layout_marginTop="16dp"> <Button android:id="@+id/delete_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Delete"/> <Button android:id="@+id/cancel_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Cancel" android:layout_marginLeft="16dp"/> </LinearLayout> </LinearLayout> ``` 注意:以上代码仅供参考,具体实现可能会因为不同的需求和场景而有所不同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值