首页 > 解决方案 > FilterList / 从 Android Studio 中的列表中搜索不起作用。我需要帮助,因为我没有 IDEA。

问题描述

我必须在我大学的 Android Studio 中做一个小项目 - 记事本。我有问题,因为我必须执行按名称搜索和读取文件的活动。

这是我的代码:

NotesActivity - 在这里我有所有要做的文件列表,我认为这里需要帮助。在函数 onCreate (NotesActivity) 中,我添加了第 48 行到第 69 行来创建 FilterList,但不起作用。你知道为什么吗 ?谢谢大家的帮助。

 package com.example.kompiuter.notepad;

    import android.content.Intent;
    import android.os.Bundle;
    import android.support.design.widget.FloatingActionButton;
    import android.support.v7.app.AlertDialog;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.LinearLayoutManager;
    import android.support.v7.widget.RecyclerView;
    import android.text.Editable;
    import android.text.TextWatcher;
    import android.view.View;
    import android.view.View.OnLongClickListener;
    import android.widget.AdapterView;
    import android.widget.ArrayAdapter;
    import android.widget.EditText;
    import android.widget.ListView;
    import android.widget.Toast;

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;

    public class NotesActivity extends AppCompatActivity {

        private ListView mListViewNotes;
        private EditText findText;
        private ArrayAdapter adapter;

        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.notes_activity);

            findText = (EditText) findViewById(R.id.note_find);
            mListViewNotes = (ListView) findViewById(R.id.list);

            FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.floatingActionButton2);
            fab.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(getApplicationContext(),WriteNoteActivity.class);
                    startActivity(intent);
                }
            });
            ArrayList<Notes> notes = new ArrayList<>();
            ArrayList<String> noteFiles = new ArrayList<>();

            adapter = new ArrayAdapter<>(this,R.layout.notes_activity_layout,notes);
            mListViewNotes.setTextFilterEnabled(true);
            mListViewNotes.setAdapter(adapter);

            findText.addTextChangedListener(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) {
                    NotesActivity.this.adapter.getFilter().filter(s);
                    adapter.notifyDataSetChanged();

                }

                @Override
                public void afterTextChanged(Editable s) {

                }
            });




        }


        @Override
        protected void onResume(){
            super.onResume();
            mListViewNotes.setAdapter(null);

            final ArrayList<Notes> notes = Utilities.getAllSavedNotes(this);

            if(notes == null || notes.size() == 0){
                Toast.makeText(this,"Nie masz notatek do zapisania!",Toast.LENGTH_SHORT).show();
                return;
            }else{
                final NotesAdapter na = new NotesAdapter(this,R.layout.notes_activity,notes);
                mListViewNotes.setAdapter(na);

                mListViewNotes.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                        String fileName = ((Notes)mListViewNotes.getItemAtPosition(position)).getDateTime() + Utilities.FILE_EXTENSION;
                        Intent viewNoteIntent = new Intent(getApplicationContext(),WriteNoteActivity.class);
                        viewNoteIntent.putExtra("NOTE_FILE",fileName);
                        startActivity(viewNoteIntent);
                    }
                });


            }


        }
    }

接下来是构造函数和适配器:

package com.example.kompiuter.notepad;

import android.content.Context;

import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.TimeZone;

public class Notes implements Serializable {

    private String mTitle;
    private String mContent;
    private long mDateTime;

    public Notes(long dateInMinillis,String title,String content){
        mDateTime = dateInMinillis;
        mTitle = title;
        mContent = content;
    }

    public void setTitle(String title){
        mTitle=title;
    }

    public String getTitle(){
        return mTitle;
    }

    public long getDateTime() {
        return mDateTime;
    }

    public String getDateTimeFormatted(Context context) {
        SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"
                , context.getResources().getConfiguration().locale);
        formatter.setTimeZone(TimeZone.getDefault());
        return formatter.format(new Date(mDateTime));
    }

    public void setContent(String content){
        mContent=content;
    }
    public String getContent() {
        return mContent;
    }
}


package com.example.kompiuter.notepad;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

public class NotesAdapter extends ArrayAdapter<Notes> {



    public NotesAdapter(Context context, int resource, List<Notes> object) {
        super(context, resource, object);
    }

    @Override
    public View getView(int position, View converView, ViewGroup parent){
        //return super.getView(position,converView,parent);
        if (converView == null){
            converView=LayoutInflater.from(getContext()).inflate(R.layout.notes_activity_layout,null);
        }
        Notes note =getItem(position);

        if (note!=null){
            TextView title = (TextView) converView.findViewById(R.id.noteName);

            title.setText(note.getTitle());


        }

        return converView;
    }





}

标签: javaandroidandroid-studio

解决方案


推荐阅读