Android 列表视图在未找到搜索项后清空,即使在清除搜索项后仍然为空
我有一个列表视图,其中我显示最近的联系人,我有Edittext,通过它我可以搜索我最近的列表。当我搜索时,一切都很完美,但当搜索到的项目没有找到,列表变为空并且在清除搜索编辑文本后仍然保持空时,问题就会出现 请告诉我哪里出错了 这是我的密码 RecentContactAdapterAndroid 列表视图在未找到搜索项后清空,即使在清除搜索项后仍然为空,android,listview,search,android-contacts,Android,Listview,Search,Android Contacts,我有一个列表视图,其中我显示最近的联系人,我有Edittext,通过它我可以搜索我最近的列表。当我搜索时,一切都很完美,但当搜索到的项目没有找到,列表变为空并且在清除搜索编辑文本后仍然保持空时,问题就会出现 请告诉我哪里出错了 这是我的密码 RecentContactAdapter public class RecentContactsAdapter extends BaseAdapter { Context mContext; ArrayList<Contacts> coverLi
public class RecentContactsAdapter extends BaseAdapter {
Context mContext;
ArrayList<Contacts> coverList;
public ArrayList<Contacts> orig;
private ColorGenerator mColorGenerator = ColorGenerator.MATERIAL;
private TextDrawable.IBuilder mDrawableBuilder;
public RecentContactsAdapter(Context c, ArrayList<Contacts> coverList)
{
super();
mContext = c;
this.coverList = coverList;
this.orig = new ArrayList<Contacts>();
this.orig.addAll(coverList);
}
@Override
public int getCount()
{
return coverList.size();
}
@Override
public Contacts getItem(int position) {
return coverList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, final ViewGroup parent)
{
return grid;
}
public void filter(String charText)
{
charText = charText.toLowerCase(Locale.getDefault());
coverList.clear();
if (charText.length() == 0)
{
coverList.addAll(orig);
}
else
{
for (Contacts wp : orig)
{
if (wp.getName().toLowerCase(Locale.getDefault())
.contains(charText) || wp.getName().toLowerCase(Locale.getDefault())
.contains(charText) || wp.getNumber().toLowerCase(Locale.getDefault())
.contains(charText))
{
if(coverList.contains(wp))
{}
else {
coverList.add(wp);
}
}
}
}
notifyDataSetChanged();
}
公共类RecentContactsAdapter扩展BaseAdapter{
语境;
ArrayList封面列表;
公共ArrayList orig;
专用ColorGenerator McColorGenerator=ColorGenerator.MATERIAL;
私有textdravable.IBuilder mDrawableBuilder;
公共最新联系人附件(上下文c,ArrayList封面列表)
{
超级();
mContext=c;
this.coverList=封面列表;
this.orig=新的ArrayList();
此原始添加(封面列表);
}
@凌驾
public int getCount()
{
返回coverList.size();
}
@凌驾
公共联系人getItem(内部位置){
返回封面列表。获取(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(最终整型位置、视图转换视图、最终视图组父视图)
{
返回网格;
}
公共空过滤器(字符串图表文本)
{
charText=charText.toLowerCase(Locale.getDefault());
coverList.clear();
如果(ChartText.length()==0)
{
封面列表。添加全部(原始);
}
其他的
{
对于(联系人wp:orig)
{
if(wp.getName().toLowerCase(Locale.getDefault())
.contains(charText)| | wp.getName().toLowerCase(Locale.getDefault())
.contains(charText)| | wp.getNumber().toLowerCase(Locale.getDefault())
.contains(图表文本))
{
if(封面清单包含(wp))
{}
否则{
封面列表。添加(wp);
}
}
}
}
notifyDataSetChanged();
}
}
RecentContactFragment
public class RecentContactsTab extends Fragment
{
View v;
Context c;
public static ListView rec_list;
ArrayList<Contacts> recent_list;
public static RecentContactsAdapter rec_ContactsAdapter;
ProgressDialog pd;
public static String number;
boolean appInstalled;
public static String email;
EditText search;
Functions functions;
VariableListener mCallback;
TextView noContact;
RecentContactsAdapter search_adapter;
RelativeLayout list;
@Override
public void onAttach(Context context) {
try {
mCallback = (VariableListener) context;
} catch (ClassCastException e) {
e.printStackTrace();
}
super.onAttach(context);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState)
{ Log.e("STEP","1");
v = inflater.inflate(R.layout.recent_layout, container, false);
c = this.getActivity();
rec_list = (ListView) v.findViewById(R.id.contact);
recent_list = new ArrayList<Contacts>();
search= (EditText) v.findViewById(R.id.recentsearch);
v.findViewById(R.id.searchView1);
noContact = (TextView) v.findViewById(R.id.rec_noContact);
list= (RelativeLayout) v.findViewById(R.id.leftSide);
tabLayout.getSelectedTabPosition();
mCallback.onVariableListener(0);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M)
{
new GetCotact().execute();
} else
{
functions = new Functions(c);
if (Settings.canDrawOverlays(c) && functions.checkpermission()) {
new GetCotact().execute();
} else {
if (!Settings.canDrawOverlays(c)) {
Intent i = new Intent(this.getActivity(), AllPermissions.class);
startActivity(i);
} else if (!functions.checkpermission()) {
Intent i = new Intent(this.getActivity(), AllPermissions.class);
startActivity(i);
}
}
}
rec_list.setTextFilterEnabled(true);
setupSearchView();
return v;
}
private void setupSearchView() {
search.addTextChangedListener(new TextWatcher()
{
@Override
public void afterTextChanged(Editable arg0)
{
String text = search.getText().toString().toLowerCase(Locale.getDefault());
if (recent_list.size() > 0)
{
rec_ContactsAdapter.filter(text);
}
else
{
rec_ContactsAdapter = new RecentContactsAdapter(getActivity(), recent_list);
rec_list.setAdapter(rec_ContactsAdapter);
}
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1,
int arg2, int arg3)
{
search_adapter = new RecentContactsAdapter(getActivity(), recent_list);
rec_list.setAdapter(rec_ContactsAdapter);
}
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
}
});
}
class GetCotact extends AsyncTask<String, Void, String> {
@Override
protected void onPreExecute() {
Log.e("STEP","2");
super.onPreExecute();
}
@Override
protected void onPostExecute(String s)
{
rec_ContactsAdapter = new RecentContactsAdapter(c, recent_list);
search_adapter=rec_ContactsAdapter;
rec_list.setAdapter(rec_ContactsAdapter);
super.onPostExecute(s);
}
@Override
protected String doInBackground(String... params) {
readContacts();
return null;
}
}
private void readContacts() {
ContentResolver cr = getActivity().getContentResolver();
if (ActivityCompat.checkSelfPermission(this.getActivity(), Manifest.permission.READ_CALL_LOG) != PackageManager.PERMISSION_GRANTED) {
}
else
{
Cursor cur = cr.query(CallLog.Calls.CONTENT_URI, null, null, null, CallLog.Calls._ID + " DESC");
String phone = null;
String emailContact = null;
String image_uri = null;
Bitmap bitmap;
String name;
if (cur.getCount() > 0)
{
while (cur.moveToNext())
{
Log.e("STEP","3");
name = cur.getString(cur
.getColumnIndex(CallLog.Calls.CACHED_NAME));
phone=cur.getString(cur.getColumnIndex(CallLog.Calls.NUMBER));
if (name==null)
{
name=" ";
phone=cur.getString(cur.getColumnIndex(CallLog.Calls.NUMBER));
image_uri=null;
}
else
{
name = cur.getString(cur
.getColumnIndex(CallLog.Calls.CACHED_NAME));
}
recent_list.add(new Contacts(name, phone, image_uri,emailContact));
emailContact="";
phone="";
}
cur.close();
}
else
{
noContact.setVisibility(View.VISIBLE);
noContact.setTextColor(getResources().getColor(R.color.default_color));
noContact.setText("No Recent Contacts");
list.setVisibility(View.GONE);
search.setVisibility(View.GONE);
}
}
}
@Override
public void onResume()
{
Log.e("STEP","4");
super.onResume();
}
公共类RecentContactsTab扩展片段
{
观点五;
上下文c;
公共静态ListView记录列表;
ArrayList最近的_列表;
公共静态最近联系人适配器rec_contacts适配器;
进展性帕金森病;
公共静态字符串号;
已安装布尔应用程序;
公共静态字符串电子邮件;
编辑文本搜索;
功能;
可变侦听器mCallback;
文本视图无联系人;
最近联系适配器搜索适配器;
相对性列表;
@凌驾
公共void-onAttach(上下文){
试一试{
mCallback=(VariableListener)上下文;
}catch(ClassCastException e){
e、 printStackTrace();
}
super.onAttach(上下文);
}
@可空
@凌驾
创建视图时的公共视图(LayoutFlater充气机、@Nullable ViewGroup容器、@Nullable Bundle savedInstanceState)
{Log.e(“步骤”,“1”);
v=充气机。充气(R布局。最新布局,容器,假);
c=this.getActivity();
记录列表=(列表视图)v.findviewbyd(R.id.contact);
最近的列表=新的ArrayList();
search=(EditText)v.findViewById(R.id.recentsearch);
v、 findViewById(R.id.searchView1);
noContact=(TextView)v.findViewById(R.id.rec_noContact);
list=(RelativeLayout)v.findViewById(R.id.leftSide);
tabLayout.getSelectedTabPosition();
mCallback.onVariableListener(0);
if(Build.VERSION.SDK_INT0)
{
rec_ContactsAdapter.filter(文本);
}
其他的
{
rec_ContactsAdapter=new RecentContactsAdapter(getActivity(),recent_list);
记录列表。设置适配器(记录联系人适配器);
}
}
@凌驾
更改前的公共无效(字符序列arg0,int arg1,
整数arg2,整数arg3)
{
search_adapter=new RecentContactsAdapter(getActivity(),recent_list);
记录列表。设置适配器(记录联系人适配器);
}
@凌驾
public void onTextChanged(字符序列arg0、int arg1、int arg2、,
int arg3){
//TODO自动生成的方法存根
}
});
}
类GetCotact扩展了异步任务{
@凌驾
受保护的void onPreExecute(){
Log.e(“步骤”,“2”);
super.onPreExecute();
}
@凌驾
受保护的void onPostExecute(字符串s)
{
rec_ContactsAdapter=新的最近的ContactsAdapter(c,最近的_列表);
搜索适配器=记录联系人适配器;
记录列表。设置适配器(记录联系人适配器);
super.onPostExecute(s);
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
readContacts();
返回null;
}
}
私有void readContacts(){
ContentResolver cr=getActivity().getContentResolver();
if(ActivityCompat.checkSelfPermission(this.getActivity()、Manifest.permission.READ\u CALL\u LOG)!=PackageManager.permission\u provided){
}
其他的
{
if (charText.length() == 0)
{
coverList.addAll(orig);
}
if (charText.length() == 0)
{
coverList.addAll(orig);
notifyDataSetChanged();
}
if (recent_list.size() > 0)
{
rec_ContactsAdapter.filter(text);
}
else
{
rec_ContactsAdapter = new RecentContactsAdapter(getActivity(), recent_list);
rec_list.setAdapter(rec_ContactsAdapter);
}
rec_ContactsAdapter.filter(text);
search_adapter = new RecentContactsAdapter(getActivity(), recent_list);
rec_list.setAdapter(rec_ContactsAdapter);