我在活动中定义了一个片段。这个片段包含一个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) {
}
});
}
}
答案 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()