0

我有一個listview不同的數據存儲在數據庫中,當我點擊特定的數據時,它將顯示該數據的細節,並且我還使用了適配器類的位置listview它會獲取要顯示的數據的詳細信息。在列表視圖中搜索數據存儲在數據庫中

我需要添加搜索listview和從結果listview,如果我點擊數據,它應該顯示的細節。請,任何人都可以爲此提供代碼。

公共類CustomerAdapter延伸BaseAdapter {

public CustomerAdapter(Context context) {  
    this.context = context; 
    this.layoutInflater = LayoutInflater.from(context); 
    reload(0, TAKE); 
} 


private void reload(int skip, int take) 
{ 
    totalSize = customers.size(); 
    System.out.println("Total Size: "+totalSize); 
    loadedCustomer = loadCustomers(skip, take); 
} 

private ArrayList<HashMap<String, Object>> loadCustomers(int skip, int take) 
{ 
    ArrayList<HashMap<String, Object>> arrayList = new ArrayList<HashMap<String,Object>>(); 

    Query query = new Query(); 
    query.select("x.fname, x.lname, x.surrogateKey, x.id"); 
    query.from("Customer", "x"); 
    query.orderBy("id", SortOrder.ASCENDING); 
    query.setTake(take); 
    query.setSkip(skip); 

    lowIndex = skip; 
    highIndex = lowIndex; 

    QueryResultSet rs = SUP101.SUP101DB.executeQuery(query); 
    while(rs.next()) 
    { 
     String fname = rs.getString(1); 
     String lname = rs.getString(2); 
     long sk = rs.getLong(3); 

     HashMap<String, Object> tempHashMap = new HashMap<String, Object>(); 
     tempHashMap.put(NAME, " " + fname + " " + lname); 
     tempHashMap.put("sk", sk); 
     arrayList.add(tempHashMap); 

     highIndex++; 
    } 

    return arrayList; 
} 



public int getCount() { 
    return totalSize; 
} 


public Object getItem(int position) { 
    reloadIfNeeded(position); 
    return loadedCustomer.get(position - lowIndex); 
} 

@SuppressWarnings("unchecked") 
public String getSK(int position) 
{ 
    HashMap<String, Object> map = (HashMap<String, Object>)getItem(position); 
    return map.get("sk").toString(); 
} 


private void reloadIfNeeded(int newPosition) 
{ 
    if(newPosition < lowIndex || newPosition >= highIndex) 
    { 
     int lowIndex = (newPosition); 
     reload(lowIndex, TAKE); 
    } 
} 

public void refreshUI(boolean force) 
{ 
    if(force) 
    { 
     reload(lowIndex, TAKE); 
     ((Activity)context).runOnUiThread(
       new Runnable() 
       { 
        public void run() 
        { 
         CustomerAdapter.this.notifyDataSetChanged();  
        }       
       } 
      ); 
    } 
} 

public long getItemId(int position) { 
    return position; 
} 


public View getView(int position, View convertView, ViewGroup parent) { 

    TextView tv = null; 
    if(convertView==null){ 
     convertView = layoutInflater.inflate(R.layout.customer, null); 
    } 
    tv = (TextView)convertView.findViewById(R.id.textView1);   
    reloadIfNeeded(position);   
    tv.setText(loadedCustomer.get(position - lowIndex).get(NAME).toString()); 
return convertView; 
} 

//的MainMenu類

 Mainmenu.this.runOnUiThread(new Runnable() 
        { 
         public void run() 
         { 
          adapter1 = new CustomerAdapter(Mainmenu.this); 
          listView.setAdapter(adapter1); 

          array_sort = new ArrayList<String>(); 
          adapter1 = new CustomerAdapter(Mainmenu.this); 
          listView.setAdapter(adapter1); 
          inputSearch.addTextChangedListener(new TextWatcher() { 

           @Override 
           public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) { 
            // When user changed the Text 
            Mainmenu.this.adapter1.getFilter().filter(cs); 
           } 

           @Override 
           public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, 
             int arg3) { 
            // TODO Auto-generated method stub 

           } 

           @Override 
           public void afterTextChanged(Editable arg0) { 
            // TODO Auto-generated method stub       
           } 
          }); 
          listView.setOnItemClickListener(new OnItemClickListener() 
          { 
           public void onItemClick(AdapterView<?> a, View v, int position, long id) 
           { 
            Intent intent = new Intent(Mainmenu.this, Detailview.class); 
            intent.putExtra("sk", adapter1.getSK(position)); 
            Mainmenu.this.startActivityForResult(intent, REQUEST_DETAIL); 
           } 

          }); 
         } 

        }); 
       } 
      }).start(); 
+0

列表視圖是工作,但我DONO添加搜索該列表視圖,從數據庫 – saran

+0

[Rû有Mr.saran獲取詳細信息?你在這裏找到解決方案嗎? –

回答

0

您可以使用FilterQueryAdapter界面如下:

DataBaseHelper myDbHelper = new DataBaseHelper(this); 
    FilterQueryProvider fqp = new myFilterQueryProvider(myDbHelper); 
     <YourCursorAdapter>.setFilterQueryProvider(fqp); 
     <YourListView>.setTextFilterEnabled(true); 
     <YourEditTextSearchbox>.addTextChangedListener(new TextWatcher() 
     { 
      @Override 
      public void onTextChanged(CharSequence s, int start, 
        int before, int count) { 
       // TODO Auto-generated method stub 

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

      } 
      @Override 
      public void afterTextChanged(Editable s) { 
       // TODO Auto-generated method stub 
       this.adaptr.getFilter().filter(s); 
      }    
     }); 

    public class myFilterQueryProvider implements FilterQueryProvider { 
    DataBaseHelper myDbHelper; 
    public myFilterQueryProvider(DataBaseHelper mdb) { 
     myDbHelper = mdb; 
    } 
    public Cursor runQuery(CharSequence constraint) 
    { 

     try { 
      myDbHelper.openDataBase(); 
     }catch(SQLException sqle){ 
      throw sqle; 
     } 

     sql =""; //Your DB Query here 
     Cursor cursor = myDbHelper.getLobbyView(sql); 
     return cursor; 
    } 
} 
+0

不,我沒有得到解決方案,因爲我使用了適配器類。我已經用我的代碼更新了這個問題。 – saran

+0

我有一個列表視圖,而在搜索列表視圖得到減少根據搜索,但問題是,通過列表的位置我會在onclick中獲取詳細信息,但是當列表視圖更改它沒有得到的細節。 – saran

0

如果您正在使用a DB

  • 只需獲取一個Edittext textwatcher。
  • 每個框TextChanged調用DB「LIKE」查詢,以顯示你的結果