今天将Fragment中的代码完成了首先是第一个fragment:
package com.eb.writeaccount; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.SharedPreferences; import android.os.Bundle; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import androidx.lifecycle.LiveData; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProviders; import androidx.navigation.NavController; import androidx.navigation.Navigation; import androidx.recyclerview.widget.DefaultItemAnimator; import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.ItemTouchHelper; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.SearchView; import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.google.android.material.snackbar.Snackbar; import java.util.List; /** * A simple {@link Fragment} subclass. */ public class wos extends Fragment { private MyViewModel myViewModel; private RecyclerView recyclerView; private MyAdapter myAdapter; private LiveData<List<Word>> filteredWords; private static final String VIEW_TYPE_SHP = "view_type_shp"; private static final String IS_USING_CARD_VIEW = "is_using_card_view"; private List<Word> allWords; private boolean undoAction; private DividerItemDecoration dividerItemDecoration; public wos() { // Required empty public constructor setHasOptionsMenu(true); } @Override public boolean onOptionsItemSelected(@NonNull MenuItem item) { AlertDialog.Builder builder = new AlertDialog.Builder(requireActivity()); builder.setTitle("清空数据"); builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { myViewModel.deleteAllWords(); } }); builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); builder.create(); builder.show(); return super.onOptionsItemSelected(item); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); inflater.inflate(R.menu.main_menu, menu); SearchView searchView = (SearchView) menu.findItem(R.id.app_bar_search).getActionView(); searchView.setMaxWidth(1000); searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { return false; } @Override public boolean onQueryTextChange(String newText) { String pattern = newText.trim(); filteredWords.removeObservers(getViewLifecycleOwner()); //先移除之前在onActivityCreated中添加的observer filteredWords = myViewModel.findWordsWithPattern(pattern); filteredWords.observe(getViewLifecycleOwner(), new Observer<List<Word>>() { @Override public void onChanged(List<Word> words) { int temp = myAdapter.getItemCount(); allWords = words; if (temp != words.size()) { myAdapter.submitList(words); } } }); return true; } }); } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); myViewModel = ViewModelProviders.of(requireActivity()).get(MyViewModel.class); recyclerView = requireActivity().findViewById(R.id.recycle); recyclerView.setLayoutManager(new LinearLayoutManager(requireActivity())); myAdapter=new MyAdapter(myViewModel); recyclerView.setAdapter(myAdapter); recyclerView.setItemAnimator(new DefaultItemAnimator() { @Override public void onAnimationFinished(@NonNull RecyclerView.ViewHolder viewHolder) { super.onAnimationFinished(viewHolder); LinearLayoutManager linearLayoutManager = (LinearLayoutManager) recyclerView.getLayoutManager(); if (linearLayoutManager != null) { int firstPosition = linearLayoutManager.findFirstVisibleItemPosition(); int lastPosition = linearLayoutManager.findLastVisibleItemPosition(); for (int i = firstPosition; i <= lastPosition; i++) { MyAdapter.MyViewHolder holder = (MyAdapter.MyViewHolder) recyclerView.findViewHolderForAdapterPosition(i); if (holder != null) { holder.textViewNumber.setText(String.valueOf(i + 1)); } } } } }); dividerItemDecoration = new DividerItemDecoration(requireActivity(),DividerItemDecoration.VERTICAL); recyclerView.addItemDecoration(dividerItemDecoration); //recyclerView.setAdapter(myAdapter1); filteredWords = myViewModel.getAllWordsLive(); filteredWords.observe(getViewLifecycleOwner(), new Observer<List<Word>>() { @Override public void onChanged(List<Word> words) { int temp = myAdapter.getItemCount(); allWords = words; if (temp != words.size()) { if (temp < words.size() && !undoAction) { recyclerView.smoothScrollBy(0,-200); } undoAction = false; myAdapter.submitList(words); } } }); new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0,ItemTouchHelper.START | ItemTouchHelper.END) { @Override public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) { // Word wordFrom=allWords.get(viewHolder.getAdapterPosition()); // Word wordto=allWords.get(target.getAdapterPosition()); // int i=wordFrom.getId(); // wordFrom.setId(wordto.getId()); // wordto.setId(i); // myViewModel.updateWords(wordFrom,wordto); // myAdapter.notifyItemMoved(viewHolder.getAdapterPosition(),target.getAdapterPosition()); return false; } @Override public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) { final Word word=allWords.get(viewHolder.getAdapterPosition()); myViewModel.deleteWords(word); Snackbar.make(requireActivity().findViewById(R.id.wosFragment),"删除了一个字符",Snackbar.LENGTH_SHORT).setAction("撤销", new View.OnClickListener() { @Override public void onClick(View v) { myViewModel.insertWords(word); } }).show(); } }).attachToRecyclerView(recyclerView); FloatingActionButton floatingActionButton = requireActivity().findViewById(R.id.floatingActionButton); floatingActionButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { NavController navController = Navigation.findNavController(v); navController.navigate(R.id.action_wos_to_addfragment); } }); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_wos, container, false); } }
然后将输入的Fgrment写完
package com.eb.writeaccount;
import android.content.Context;
import android.os.Bundle;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.lifecycle.ViewModelProviders;
import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
/**
* A simple {@link Fragment} subclass.
*/
public class addfragment extends Fragment {
private Button buttonSubmit;
private EditText editTextmoney,editTexttime;
private MyViewModel myViewModel;
public addfragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_addfragment, container, false);
}
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
FragmentActivity activity = requireActivity();
myViewModel = ViewModelProviders.of(activity).get(MyViewModel.class);
buttonSubmit = activity.findViewById(R.id.button);
editTextmoney = activity.findViewById(R.id.editTextmoney);
editTexttime = activity.findViewById(R.id.editTexttime);
buttonSubmit.setEnabled(false);
editTextmoney.requestFocus();
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(editTextmoney,0);
TextWatcher textWatcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
String english = editTextmoney.getText().toString().trim();
String chinese = editTexttime.getText().toString().trim();
buttonSubmit.setEnabled(!english.isEmpty() && !chinese.isEmpty());
}
@Override
public void afterTextChanged(Editable s) {
}
};
editTextmoney.addTextChangedListener(textWatcher);
editTexttime.addTextChangedListener(textWatcher);
buttonSubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String english = editTextmoney.getText().toString().trim();
String chinese = editTexttime.getText().toString().trim();
Word word = new Word(english,chinese);
myViewModel.insertWords(word);
NavController navController = Navigation.findNavController(v);
navController.navigateUp();
InputMethodManager imm = (InputMethodManager) requireActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(),0);
}
});
}
}