【问题标题】:Search Custom Listview implements simplecursoradapter Android?搜索自定义 Listview 实现 simplecursoradapter Android?
【发布时间】:2013-09-11 21:57:43
【问题描述】:

我想搜索扩展 simplecursoradapter 的 customlistview。我尝试了很多方法,但我没有得到,这是我的代码。我错过了什么。 提前致谢。 1.具有搜索功能的类

public class Alertadditem extends Activity {
private CustomContacts custAdapter;
Editext edt;
ListView listview;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_alertdesignlist);
String[] from = new String[] { Contactsnew.CONTENT };
int[] to = new int[] { R.id.content123};
custAdapter = new CustomContacts(this,
        R.layout.activity_contactitem, null, from, to);
listview.setAdapter(custAdapter);
listview.setTextFilterEnabled(true);
edt.addTextChangedListener(new TextWatcher(){

        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub
            //setUpSearchList();
        }
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
            // TODO Auto-generated method stub
            dataAdapter.getFilter().filter(s);  
        }

    });

2.customadapter

public class CustomContacts extends SimpleCursorAdapter {

public CustomContacts(Context context, int layout, Cursor c, String[] from,
        int[] to) {
    super(context, layout, c, from, to);
    // TODO Auto-generated constructor stub
}
public CharSequence convertToString(Cursor cursor) {
    return cursor.getString(cursor.getColumnIndex(Contactsnew.CONTENT));
    }
 @Override 
  public View getView(int position, View convertView, ViewGroup parent) {  

   //get reference to the row
   View view = super.getView(position, convertView, parent); 
   //check for odd or even to set alternate colors to the row background
   if(position % 2 == 0){  
    view.setBackgroundColor(0xFFC1E7FF);
   }
   else {
    view.setBackgroundColor(0xFF6495ED);
   }
   final TextView ttext = (TextView)view.findViewById(R.id.finaltext);
    final LinearLayout ll = (LinearLayout) view.findViewById(R.id.ll11);
   final TextView tcontent = (TextView)view.findViewById(R.id.content123);
   final CheckBox check = (CheckBox)view.findViewById(R.id.itemcheck);
    check.setOnClickListener(new OnClickListener() {

    public void onClick(View v) {
        // TODO Auto-generated method stub
        if(check.isChecked()){
            tcontent.setPaintFlags(tcontent.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
            ttext.setVisibility(v.VISIBLE);
            ll.setVisibility(v.VISIBLE);


        }else{
            tcontent.setPaintFlags(tcontent.getPaintFlags() & ~Paint.STRIKE_THRU_TEXT_FLAG);
            ttext.setVisibility(v.GONE);
            ll.setVisibility(LinearLayout.GONE);
        }

    }

});
   return view;  
  }  
}

【问题讨论】:

  • 你试过打电话给custAdapter.notifyDataSetChanged()吗?也不应该是custAdapter.getFilter().filter(s)
  • 是的,我尝试调用 notifydatasetchanged,但没有响应...我们要写而不是 custadapter...
  • 但我在你的代码中看到了这个dataAdapter.getFilter().filter(s),你在哪里调用notifydatasetchanged?并在你的适配器类中使用 bindview 和 newview
  • 对不起,这是我的错...而不是我给了 custAdapter。

标签: android listview filter


【解决方案1】:

试试这个

public class CustomContacts extends android.widget.CursorAdapter {

 private LayoutInflater mLayoutInflater;
 private Context mContext;

public CustomContacts(Context context, Cursor c) {
    super(context, c);
    // TODO Auto-generated constructor stub
     mContext = context;
     mLayoutInflater = LayoutInflater.from(context); 
}

@Override
public void bindView(View view, Context context, Cursor cursor) {
    // TODO Auto-generated method stub
     String data = cursor.getString(cursor.getColumnIndexOrThrow(Contactsnew.CONTENT));

     if(cursor.getPosition() % 2 == 0){  
            view.setBackgroundColor(0xFFC1E7FF);
           }
           else {
            view.setBackgroundColor(0xFF6495ED);
     }

       final TextView ttext = (TextView)view.findViewById(R.id.finaltext);
       final LinearLayout ll = (LinearLayout) view.findViewById(R.id.ll11);
       final TextView tcontent = (TextView)view.findViewById(R.id.content123);
       if (tcontent != null) {
           tcontent.setText(data);
        }

       final CheckBox check = (CheckBox)view.findViewById(R.id.itemcheck);
       check.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub
            if(check.isChecked()){
                tcontent.setPaintFlags(tcontent.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
                ttext.setVisibility(v.VISIBLE);
                ll.setVisibility(v.VISIBLE);


            }else{
                tcontent.setPaintFlags(tcontent.getPaintFlags() & ~Paint.STRIKE_THRU_TEXT_FLAG);
                ttext.setVisibility(v.GONE);
                ll.setVisibility(LinearLayout.GONE);
            }

        }

     });
}

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
    // TODO Auto-generated method stub
    View v = mLayoutInflater.inflate( R.layout.activity_contactitem,parent, false);
    return v;
}

}

并将适配器设置为

custAdapter = new CustomContacts(this,your_cursor);
listview.setAdapter(custAdapter);

“R.id.finaltext”、“R.id.ll11”和“R.id.itemcheck”必须包含在布局“R.layout.activity_contactitem”中

【讨论】:

  • 等我看看再说
  • 我有一个疑问,我们是否想提供 your_cursor 的 plce,我是 android 新手,所以只问
  • 它包含数据(Contactsnew.CONTENT)到您的列表视图
  • 这是我的游标值 db = openOrCreateDatabase(Contactsnew.DB_NAME, MODE_PRIVATE, null);光标 cTitle = db.rawQuery(" SELECT * FROM " + Contactsnew.TABLE3 + " WHERE " + Contactsnew.userid + " = " + GetSet.getUserId() + " AND " + Contactsnew.CONTENT + " LIKE ? ", 新字符串[] { edt.getText() + "%" }); startManagingCursor(cTitle);
  • 使用 cTitle 作为 your_cursor ; alue db = open...... Cursor cTitle = db.rawQ....... custAdapter = new CustomContacts(this,cTitle);... 如果您的数据库查询 'SELECT *' 包含值列 Contactsnew.CONTENT
【解决方案2】:

我也有同样的问题,在你的 db 类中尝试这些代码并从你的主类中分类这些代码。

public static Cursor fetchAllvalues1() {

  Cursor mCursor = db.query(Contactsnew.TABLE02, new String[] {Contactsnew.userid,Contactsnew.userId,Contactsnew.CATEGORY,Contactsnew.TITLE},
    null, null, null, null, null);

  if (mCursor != null) {
   mCursor.moveToFirst();
  }
  return mCursor;
 }
public static Cursor fetchCountriesByName1(String inputText) throws SQLException {
  Log.w(TAG, inputText);
  Cursor mCursor = null;
  if (inputText == null  ||  inputText.length () == 0)  {
   mCursor = db.query(Contactsnew.TABLE02, new String[] {Contactsnew.userid,Contactsnew.userId,Contactsnew.CATEGORY,Contactsnew.TITLE},
     null, null, null, null, null);

  }
  else {
      mCursor=db.rawQuery(" SELECT * FROM "+ Contactsnew.TABLE02 + " WHERE " 
                + Contactsnew.userId + " = " + GetSet.getUserId() + " AND " + Contactsnew.TITLE +
                         " LIKE ? " ,new String []{inputText +"%"});
  }
  if (mCursor != null) {
   mCursor.moveToFirst();
  }
  return mCursor;

 }

【讨论】:

    猜你喜欢
    • 2018-06-21
    • 2017-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-28
    • 2014-04-15
    相关资源
    最近更新 更多