java——android应用程序栏搜索的特殊行为

1qczuiv0  于 2021-08-25  发布在  Java
关注(0)|答案(0)|浏览(162)

我想在我的notes应用程序中实现搜索功能。它可以工作,但单击搜索图标时,我的视图会向下按键盘,如果不按“后退”按钮,我就无法向上移动。我正在附加两张图片。一张显示应用程序屏幕的外观,另一张显示按下搜索图标时的外观。非常烦人的问题,是什么原因造成的?
mainactivity.java:

ArrayList<cardHandler> cardList;
private RecyclerView recyclerView;
private cardAdapter adapter;
private RecyclerView.LayoutManager layoutManager;
private Toolbar toolbar;

View main_view;
ExtendedFloatingActionButton floatingActionButton;
TextView NoNotesOrListView;
DatabaseHelperForNotes databaseHelperForNotes;

@RequiresApi(api = Build.VERSION_CODES.M)
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    databaseHelperForNotes = new DatabaseHelperForNotes(MainActivity.this);
    NoNotesOrListView = findViewById(R.id.textView_fornolist);
    main_view = findViewById(R.id.main_view);
    recyclerView = findViewById(R.id.view_for_notes_list);
    cardList = new ArrayList<>();
    floatingActionButton = findViewById(R.id.createNewNote);
    toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    getNotesAndList();

    recyclerView.setOnScrollChangeListener(new View.OnScrollChangeListener() {
        @Override
        public void onScrollChange(View view, int x, int y, int oldX, int oldY) {
            int scroll = y-oldY;
            if (scroll>0){
                floatingActionButton.hide();
            }else if(scroll<0){
                floatingActionButton.show();
                floatingActionButton.extend();
            }else {
                floatingActionButton.show();
            }
        }
    });
    /*Integer deleted = databaseHelperForNotes.deleteAllData();
    if (deleted<=0){

    }else{
        Toast.makeText(MainActivity.this,
                "Deleted All data.. ",
                Toast.LENGTH_SHORT).show();
    }*/

}

private void getNotesAndList() {
    String noteContent,noteTitle,noteDate;
    int noteid;
    Cursor cursor;
    cursor = databaseHelperForNotes.viewDefault();
    if (cursor == null || cursor.getCount()<=0){

        NoNotesOrListView.setVisibility(View.VISIBLE);
        NoNotesOrListView.append("Added items \nwill be shown here..."+"\n");

    }else{

        recyclerView.setVisibility(View.VISIBLE);
        cursor.moveToLast();
        do{

            noteContent = cursor.getString(cursor.getColumnIndex("CONTENT"));
            noteid = cursor.getInt(cursor.getColumnIndex("_id"));
            noteTitle = cursor.getString(cursor.getColumnIndex("TITLE"));
            noteDate = (String)cursor.getString(cursor.getColumnIndex("DATE"));
            SimpleDateFormat dateFormat = new SimpleDateFormat(
                    "dd-MM-yyyy HH:mm", Locale.getDefault());
            Date date = new Date();
            String timeStamp;
            String date_current = dateFormat.format(date);
            if (date_current.substring(0,2).equals(noteDate.substring(0,2))){
                 timeStamp = "Today "+noteDate.substring(11);
            }else if(Integer.parseInt(date_current.substring(0,2)) - Integer.parseInt(noteDate.substring(0,2)) == 1) {
                timeStamp = "Yesterday "+noteDate.substring(11);
            }else{
                String month = noteDate.substring(3,5);
                String monthName = new DateFormatSymbols().getMonths()[Integer.parseInt(month)-1];
                timeStamp = noteDate.substring(0,2)+" "+monthName;
            }
            populateCards(MainActivity.this,noteContent,noteTitle,timeStamp,getRandomColor(),noteid);
            cursor.moveToPrevious();
        }while(!cursor.isBeforeFirst());
    }
}

private void recyclerViewConfigure() {
    //configure adapter
    recyclerView = findViewById(R.id.view_for_notes_list);
    //performance
    recyclerView.setHasFixedSize(true);

    layoutManager = new LinearLayoutManager(this);
    adapter = new cardAdapter(cardList);

    recyclerView.setLayoutManager(layoutManager);
    recyclerView.setAdapter(adapter);

}

private void populateCards(Context con,String noteContent, String noteTitle,String date,int color,int id) {
            cardList.add(new cardHandler(MainActivity.this,con,noteTitle,noteContent,date,color,id));
            recyclerViewConfigure();
}

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 1){
        recreate();
    }
}

public int getRandomColor(){

    String[] colors = {"#DBA9A9","#EAB9B9","#E7DDDC","#FFE7E4","#FFC388","#FFC388","#D6D1B4","#FFEC88","#F7F4C7","#D4EC88","#CCE7C7","#B1F2EC",
    "#B4ECEA","#DBF6FA","#C7E8FD","#C6BDF8","#D9A5F9","#ECDFEC","#EAB7BD","#FB7E81","#F39FA1","#FFD9E0","#FF99EB","#C2BBEA"};
    int idx = new Random().nextInt(colors.length);
    String random = (colors[idx]);
    int col = Color.parseColor(random);
    try{
        return col;
    }catch (NumberFormatException e){
        return 0;
    }

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.mainmenu,menu);

    MenuItem item = menu.findItem(R.id.app_bar_search);
    androidx.appcompat.widget.SearchView searchView = (androidx.appcompat.widget.SearchView)item.getActionView();
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            return false;
        }
    });
    return super.onCreateOptionsMenu(menu);
}

public void createNewList(View view) {
    Intent listIntent = new Intent(MainActivity.this,Create_List.class);
    startActivity(listIntent);
}

public void createNewNote(View view) {
    Intent noteIntent = new Intent(MainActivity.this,Create_Note.class);
    startActivity(noteIntent);
}

}
mainmenu.xml:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android">

   <item
       android:id="@+id/app_bar_search"
       android:icon="@drawable/ic_search_black_24dp"
       app:showAsAction="ifRoom|collapseActionView"
       android:title="Search"
       app:actionViewClass="androidx.appcompat.widget.SearchView" />
   <item
       android:title="Bookmarks"
       android:id="@+id/access_bookmarked_notes"
       />
   <item android:title="Locked Notes"
       android:id="@+id/access_locked_notes"
       />
   <item android:title="About"
       android:id="@+id/access_about"/>

</menu>

链接到两个屏幕

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题