在哪里放置文本更改侦听器代码?

时间:2018-03-14 20:56:09

标签: android

我在活动中定义了一个片段。这个片段包含一个ListView,它显示了数据库中的一些信息。我还提供了一个EditText视图,用户可以在其中键入内容。我想添加一个代码,每当用户输入EditText(使用addTextChangedListener方法)时,都会更新列表视图。我的问题是我不知道在哪里放置代码!我将代码放在片段onViewCreated方法中,但它不起作用!如果我将代码放在onCreate方法中,因为它不包含任何视图参数(与具有此类参数的onViewCreated相比),我不知道如何访问视图。我的代码可以在下面看到。任何帮助表示赞赏。

 package com.example.lenovo.apptel_book;

    import android.content.Context;
    import android.database.Cursor;
    import android.net.Uri;
    import android.os.Bundle;
    //import android.support.v4.app.Fragment;
    import android.support.annotation.Nullable;
    import android.text.Editable;
    import android.text.TextWatcher;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.app.Fragment;
    import android.app.FragmentManager;
    import android.app.FragmentTransaction;
    import android.widget.ArrayAdapter;
    import android.widget.EditText;
    import android.widget.ListView;
    import android.widget.TextView;
    import java.util.ArrayList;


    public class my_search_fragment extends Fragment {


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        return inflater.inflate(R.layout.fragment_my_search_fragment, container, false);

    }


    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        my_DBhelper db = new my_DBhelper(getActivity());

        final ListView lv = (ListView)view.findViewById(R.id.listview1);

        ArrayList<String> arr_lst = new ArrayList<String>();

        final Cursor cr = db.db_getAllData();
        while (cr.moveToNext())
            arr_lst.add(cr.getString(1) + "  " + cr.getString(2) + "\n" + cr.getString(3));


        ArrayAdapter<String> arr_adp = new ArrayAdapter<String>(
                getActivity(),android.R.layout.simple_list_item_1,arr_lst
        );

        lv.setAdapter(arr_adp);

        final EditText et_name = (EditText)view.findViewById(R.id.et_search_name);
        final String tmp_str = et_name.getText().toString();

        et_name.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)
            {
                ArrayList<String> tmp_arr_lst = new ArrayList<String>();

                while (cr.moveToNext())
                {
                    if(cr.getString(1).contains(tmp_str))
                        tmp_arr_lst.add(cr.getString(1) + "  " + cr.getString(2) + "\n" + cr.getString(3));
                }

                ArrayAdapter<String> tmp_arr_adp = new ArrayAdapter<String>(
                        getActivity(),android.R.layout.simple_list_item_1,tmp_arr_lst
                );

                lv.setAdapter(tmp_arr_adp);
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });
    }

}

1 个答案:

答案 0 :(得分:0)

在OnTextChanged中使用此代码

  ArrayList<String> tmp_arr_lst = new ArrayList<String>();

        while (cr.moveToNext())
        {
            if(cr.getString(1).contains(s.toString())
                tmp_arr_lst.add(cr.getString(1) + "  " + cr.getString(2) + "\n" + cr.getString(3));
        }

        ArrayAdapter<String> tmp_arr_adp = new ArrayAdapter<String>(
                getActivity(),android.R.layout.simple_list_item_1,tmp_arr_lst
        );

        lv.setAdapter(tmp_arr_adp);

我刚刚将tmp_str更改为s.toString()