2016-03-07 122 views
0

我有一個自動完成文本視圖,顯示sq-lite數據庫的公司名稱。從數據庫記錄是正確的沒有問題。但問題是適配器.adapter是不清楚的,像我第一次搜索的東西和建議顯示比刪除它,並再次鍵入和數據庫中沒有建議,但適配器顯示舊的建議是在最後搜索。 下面我把圖像,以便清楚地確定什麼問題AutoCompletetextview自定義適配器問題

This image for write output

this is wrong output

1enter image description here

enter image description here 這裏是我的topuptransfer.java代碼

public class TopupTransfer extends BaseActivity{ 

    AutoCompleteTextView memberView; 
    ArrayList <String> name = null,name1= null; 
    Button btnSubmit; 
    String membercode2,amount; 
    EditText amnt,smspin;; 
    HashMap<String,String> memberDetail; 
    AutoCompleteAdapter2 adapter; 
    DatabaseHelper db; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.topuptransfer); 
     if(!(Thread.getDefaultUncaughtExceptionHandler() instanceof ExceptionHandler)) 
     { 
      Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(this)); 
     } 
     /*ActionBar actionBar = getSupportActionBar(); 
     assert actionBar != null; 
     actionBar.setDisplayHomeAsUpEnabled(true); 
     actionBar.setHomeAsUpIndicator(R.drawable.back);*/ 

     db = new DatabaseHelper(TopupTransfer.this); 

     memberView = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView1); 
     name = new ArrayList<String>(); 
     name1 = new ArrayList<String>(); 
     memberDetail = new HashMap<String,String>(); 
     amnt = (EditText) findViewById(R.id.topup_amnt); 
     btnSubmit = (Button) findViewById(R.id.button); 
     smspin = (EditText) findViewById(R.id.smspin); 

     EditText mobileno = (EditText) findViewById(R.id.mobileno); 
     mobileno.setText(ResponseString.getMobno()); 

     if(ResponseString.getRequiredSmsPin().equals("TRUE")) 
     { 
      smspin.setVisibility(View.VISIBLE); 
     } 
     else 
     { 
      smspin.setVisibility(View.INVISIBLE); 
     } 

     memberView.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) { 

       String text = s.toString(); 
       Log.d("text", "" + text); 
       //adapter.clear(); 
       int len = text.length(); 
       if (memberView != null) 
       { 
       if(len >= 3) { 
        Log.d("text", "" + text); 
        try { 
          if(name1 != null){name1.clear();} 
          name1 = GetList(text); 
          Log.d("name1", "" + name1.size()); 
          if(ResponseString.getStcode().equals("0")) { 
           if (name1.size() != 0) { 
            Log.d("ADPTER LIST", name1.toString()); 
            //adapter = new AutoCompleteAdapter(TopupTransfer.this, R.layout.listview_raw,R.id.desc, name1); 
            adapter = new AutoCompleteAdapter2(TopupTransfer.this,R.id.desc, name1); 
            memberView.setAdapter(adapter); 
           } 
          } 
          else { 
           Toast.makeText(TopupTransfer.this, "" + BaseActivity.sMsg, Toast.LENGTH_SHORT).show(); 
          } 
         }catch(Exception e){ 

          Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(TopupTransfer.this)); 
          //throw new RuntimeException("Check in Topup transfer"); 
         } 
        } 
       } 
      } 

      @Override 
      public void afterTextChanged(Editable s) { 
      } 
     }); 

     btnSubmit.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       if(ResponseString.getRequiredSmsPin().equals("TRUE")) 
       { 
        String sms = smspin.getText().toString(); 
        String rs = ResponseString.getSmspwd(); 

        if (sms.length() == 0) { 
         toastValidationMessage(TopupTransfer.this, getResources().getString(R.string.plsentersmspin)); 
         smspin.requestFocus(); 
        } 
        else if (!sms.equals(rs)) { 
         toastValidationMessage(TopupTransfer.this, getResources().getString(R.string.pinentercorrect)); 
        } 
       } 

       if (memberView.getText().toString().length() == 0) { 
        toastValidationMessage(TopupTransfer.this, getResources().getString(R.string.plsenterfirm)); 
        memberView.requestFocus(); 
        return; 
       }else if (amnt.getText().toString().length() == 0) { 
        toastValidationMessage(TopupTransfer.this, getResources().getString(R.string.plsenteramnt)); 
        amnt.requestFocus(); 
        return; 
       } 
       String Dpattern = memberView.getText().toString(); 
       membercode2 = BaseActivity.detailMember.get(Dpattern); 
       amount = amnt.getText().toString(); 

       Log.d("membercode",""+ membercode2); 
       Log.d("amount", "" + amount); 
       try { 

        if (membercode2.equals(null)) { 
         Toast.makeText(TopupTransfer.this, "Firm name is not Valid", Toast.LENGTH_SHORT).show(); 
        } else { 
         boolean con = isInternetConnected(); 
         if (con) { 
          AsyncTaskCommon asy = new AsyncTaskCommon(TopupTransfer.this, membercode2, amount); 
          stcode = asy.execute("TopupTransfer").get(); 
          /*int i = 0; 
          //BaseActivity.showProgressDialog(LoginActivity.this); 
          while (!BaseActivity.baseResponse) { 
           i++; 
          }*/ 
          if(stcode.equals("0")) 
          { 
           AlertDialog.Builder builder = new AlertDialog.Builder(TopupTransfer.this); 
           builder.setTitle(R.string.app_name); 
           builder.setMessage(BaseActivity.sMsg); 
           builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
            public void onClick(DialogInterface dialog, int id) { 
             BaseActivity.sMsg = ""; 
             finish(); 
             Intent m = new Intent(TopupTransfer.this,TopupTransfer.class); 
             overridePendingTransition(R.anim.pull_in_right, R.anim.push_out_left); 
             startActivity(m); 
            } 
           }); 
           builder.show(); 
          } 
          else 
          { 
           toastValidationMessage(TopupTransfer.this, sMsg); 
          } 

         } else { 
          Toast.makeText(TopupTransfer.this, "Check your Internet Connection", Toast.LENGTH_SHORT).show(); 
         } 
        } 
       }catch (Exception e) 
       { 
        Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(TopupTransfer.this)); 
       } 
      } 
     }); 

    } 
public boolean onCreateOptionsMenu(Menu menu) { 
          MenuInflater inflater = getMenuInflater(); 
          inflater.inflate(R.menu.menu_main, menu); 
          return true; 
         } 
public boolean onOptionsItemSelected(MenuItem item) 
{ 
    switch (item.getItemId()) { 

     case R.id.action_signout: 
      logout(TopupTransfer.this); 
     default: 
      return super.onOptionsItemSelected(item); 
     } 
} 

ArrayList<String> GetList(String text) { 
    ArrayList<String> arrayListtemp = new ArrayList<String>(); 
    Cursor cursor = db.getTimeRecordList(text, "ChildUserInfo"); 
    if (cursor != null){ 
     if (cursor.moveToFirst()) { 
      do { 
       arrayListtemp.add(cursor.getString(cursor.getColumnIndex("FirmName")));// added your table value from database 
      } while (cursor.moveToNext()); 
     } 
    } 
     return arrayListtemp; 
} 
@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 

    if(keyCode == KeyEvent.KEYCODE_BACK) { 
      doExit(); 
    } 
    return super.onKeyDown(keyCode, event); 
} 
private void doExit() { 
     finish(); 
     Intent intent = new Intent(TopupTransfer.this,HomePage.class); 
     startActivity(intent); 
    } 
} 

對於適配器類 AutoCompleteAdapter.java

public class AutoCompleteAdapter extends ArrayAdapter<String> implements Filterable { 

    private ArrayList<String> fullList = null; 
    private ArrayList<String> mOriginalValues= null; 
    private ArrayFilter mFilter = null; 

    public AutoCompleteAdapter(Context context, int resource,int textViewResourceId, ArrayList<String> fullList) { 

     super(context, resource, textViewResourceId, fullList); 
     this.fullList = fullList; 
     mOriginalValues = new ArrayList<String>(fullList); 

    } 

    @Override 
    public int getCount() { 
     return fullList.size(); 
    } 

    @Override 
    public String getItem(int position) { 
     return fullList.get(position); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     return super.getView(position, convertView, parent); 
    } 

    @Override 
    public Filter getFilter() { 
     if (mFilter == null) { 
      mFilter = new ArrayFilter(); 
     } 
     return mFilter; 
    } 

    private class ArrayFilter extends Filter { 
     private Object lock; 

     @Override 
     protected FilterResults performFiltering(CharSequence prefix) { 
      FilterResults results = new FilterResults(); 

      if (mOriginalValues == null) { 
       synchronized (lock) { 
        mOriginalValues = new ArrayList<String>(fullList); 
       } 
      } 

      ArrayList<String> queryResults; 
      if (prefix != null && prefix.length() >= 3 && mOriginalValues != null) { 
       queryResults = autocomplete(prefix.toString()); 
      } else { 
       queryResults = new ArrayList<String>(); // empty list/no suggestions showing if there's no valid constraint 
      } 
      results.values = queryResults; 
      Log.d("results2",""+results.values); 
      results.count = queryResults.size(); 
      Log.d("results count2 ",""+results.count); 
      return results; 

     } 

     private ArrayList<String> autocomplete(String input) { 
      ArrayList<String> queryResults = new ArrayList<String>(); 
      if(mOriginalValues != null) { 
       ArrayList<String> values = mOriginalValues; 
       int count = values.size(); 
       if (count >= 1) { 
        for (int i = 0; i < count; i++) { 
         String item = values.get(i); 
         queryResults.add(item); 
        } 
       } 
      } 
      return queryResults; 
     } 
     @SuppressWarnings("unchecked") 
     @Override 
     protected void publishResults(CharSequence constraint,FilterResults results) { 

      if (results.values != null) { 
       Log.d("results",""+results.values); 
       fullList = (ArrayList<String>) results.values; 
       Log.d("fullist",""+fullList.toString()); 
      } else { 
       fullList = new ArrayList<String>(); 
      } 
      if (results.count > 0) { 
       Log.d("result count", "" + results.count); 
       notifyDataSetChanged(); 
      } else { 
       notifyDataSetInvalidated(); 
      } 
     } 
    } 
} 
+0

充值傳輸類文件的變量--name1可變大小爲0當我會嘗試在自動完成文本視圖中輸入錯誤。 –

+0

從你的代碼中,我可以看到你正在對FullList執行過濾器,並且你也擁有原創者,但是如果你清除了自動完成的文本,你永遠不會用原始列表重新初始化完整列表。 –

+0

對不起,我不明白你說什麼。如果你沒有問題,編輯我的代碼併發布。先謝謝了。 - Silvans Solanki –

回答

0

你必須使用NotifyDataSetChanged更新適配器後,填充新的數據

if(ResponseString.getStcode().equals("0")) { 
            if (name1.size() != 0) { 
             Log.d("ADPTER LIST", name1.toString()); 
             //adapter = new AutoCompleteAdapter(TopupTransfer.this, R.layout.listview_raw,R.id.desc, name1); 
             adapter = new AutoCompleteAdapter2(TopupTransfer.this,R.id.desc, name1); 
             memberView.setAdapter(adapter); 
             adapter.NotifyDatasetChanged(): 
            } 
           } 
+0

這不適用於我的情況... –

0

這是我在我的情況怎麼實現的,請檢查出來:

public class EmployeeAdapter extends BaseAdapter 

{ 

    Context    context; 
    private ArrayList<Employee> employeelist ; 
    private ArrayList<Employee> arraylist; 



    public EmployeeAdapter(Context context2, ArrayList<Employee> employeeList2) 
    { 
     this.context = context2; 
     this.employeelist = employeeList2; 
     this.arraylist = new ArrayList<Employee>(); 
     this.arraylist.addAll(employeelist); 

    } 

    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return employeelist.size(); 
    } 

    @Override 
    public Object getItem(int position) { 

     return employeelist.get(position).getEMPLOYEEID(); 
    } 

    @Override 
    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) 

    { 

     // TODO Auto-generated method stub 

     LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
     final ViewHolder holder; 

     if (convertView == null) 
     { 
      convertView = inflater.inflate(R.layout.cursor_row, null); 
      holder = new ViewHolder(); 

      holder.employeename = (TextView) convertView.findViewById(R.id.textcursor); 


      convertView.setTag(holder); 

     } 
     else 
     { 

      holder = (ViewHolder) convertView.getTag(); 
     } 




     holder.empname=employeelist.get(position).getNAME(); 
     holder.empid=employeelist.get(position).getEMPLOYEEID(); 


     holder.employeename.setText(holder.empname); 




     convertView.setOnClickListener(new OnClickListener() 
     { 

      @Override 
      public void onClick(View v) 
      { 


       //context.startActivity(new Intent(context, EmployeeActivity.class)); 
        Intent i = new Intent(context, EmployeeActivity.class); 
       int empid=employeelist.get(position).getEMPLOYEEID(); 

       i.putExtra("emp_id", empid); 
       i.putExtra(Variables.EmployeeType, 1); 

       context.startActivity(i); 




      } 
     }); 


     convertView.setOnLongClickListener(new OnLongClickListener() 
     { 

      @Override 
      public boolean onLongClick(View v) 
      { 
       Log.e("", "Long clickeddddddd"); 

       notifyDataSetChanged(); 

       return false; 
      } 
     }); 
     notifyDataSetChanged(); 

     return convertView; 

    } 

    private class ViewHolder 
    { 
     TextView employeename; 
     String empname; 
     int empid; 


     // TextView FreeItemquantity; 
     // CheckBox check1; 
    } 

    public void filter(String charText) 
    { 
     charText = charText.toLowerCase(Locale.getDefault()); 
     employeelist.clear(); 
     if (charText.length() == 0) 
     { 

      notifyDataSetChanged(); 
      employeelist.addAll(arraylist); 
     } 
     else 
     { 
      for (Employee wp : arraylist) 
      { 
       if (wp.getNAME().toLowerCase(Locale.getDefault()).contains(charText)) 
       { 
        employeelist.add(wp); 
       } 
      } 
      if (employeelist.size() < 1) 
      { 
       Toast.makeText(context, "No Matches Found", Toast.LENGTH_SHORT).show(); 
       //Toast.makeText(context, " No Matches Found ", 1); 
      } 

     } 
     notifyDataSetChanged(); 
    } 

    private Context getContext() { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    /*public ItemClicked getItem(int position){ 

     return items.get(position); 
     }*/ 


}