2015-05-14 36 views
2

我尝试过去几天以来,但是我没有达到目标。我在代码中遇到的问题是当我在列表视图中输入EditText进行搜索时,搜索标准取决于“策略否”。它适用于单个值(策略编号),并且在我输入时会发生变化。但其余的其他价值并没有改变,它仍然在他们自己的地方。请帮助我。提前致谢 。并为我的糟糕英语感到抱歉。Android ListView搜索仅更改行中的目标值,行中的所有其他数据都不会更改

import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 
import java.util.StringTokenizer; 
import android.app.Activity; 
import android.content.Intent; 
import android.graphics.Interpolator.Result; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.Button; 
import android.widget.Filter; 
import android.widget.Filterable; 
import android.widget.TextView; 


public class ListViewAdapter_claimlist extends BaseAdapter implements Filterable{ 

Activity context; 
String claimid[]; 
String ref[]; 
String policy[]; 
String natureofloss[]; 
String status[]; 

private ItemFilter mFilter = new ItemFilter(); 

private List<String>originalData = null; 
private List<String>filteredData = null; 

private List<String>claimidFilter = null; 
private List<String>refFilter = null; 
private List<String>nautreoflossfilter = null; 
private List<String>statusFilter = null; 

ArrayList<abc> alldata = new ArrayList<abc>(); 


public ListViewAdapter_claimlist(Activity context, String[] claimid, String[] ref,String[] policy, String[] natureofloss, String[] status) { 
    super(); 
    this.context = context; 
    this.claimid = claimid; 
    this.ref = ref; 
    this.policy = policy; 
    this.natureofloss = natureofloss; 
    this.status = status; 

    this.filteredData = new ArrayList<String>(Arrays.asList(this.policy)); 
    this.originalData = new ArrayList<String>(Arrays.asList(this.policy)); 

    this.claimidFilter = new ArrayList<String>(Arrays.asList(this.claimid)); 
    this.refFilter = new ArrayList<String>(Arrays.asList(this.ref)); 
    this.nautreoflossfilter = new ArrayList<String>(Arrays.asList(this.natureofloss)); 
    this.statusFilter = new ArrayList<String>(Arrays.asList(this.status)); 

    for(int i = 0; i<this.claimid.length; i++) 
    { 
     abc a = new abc(); 
     a.setClaimid(claimid[i]); 
     a.setRef(ref[i]); 
     a.setPolicy(policy[i]); 
     a.setNatureofLoss(natureofloss[i]); 
     a.setStatus(status[i]); 
     alldata.add(a); 
    } 

} 

public int getCount() { 
    return filteredData.size(); 
} 

public Object getItem(int position) { 
    return filteredData.get(position); 
} 

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

private class ViewHolder { 
    TextView cliamid; 
    TextView ref; 
    TextView policy; 
    TextView natureofloss; 
    TextView status; 
} 

public View getView(int position, View convertView, final ViewGroup parent) 
{ 
    final ViewHolder holder; 
    LayoutInflater inflater = context.getLayoutInflater(); 
    if (convertView == null) 
    { 
     convertView = inflater.inflate(R.layout.rowitem_cliamlist, null); 
     holder = new ViewHolder(); 
     holder.cliamid = (TextView) convertView.findViewById(R.id.tv_claims); 
     holder.ref = (TextView) convertView.findViewById(R.id.tv_referencepolicy); 
     holder.policy = (TextView) convertView.findViewById(R.id.tv_policyNo); 
     holder.natureofloss = (TextView) convertView.findViewById(R.id.tv_natureoflos); 
     holder.status = (TextView) convertView.findViewById(R.id.tv_claimstatus); 
     convertView.setTag(holder); 
    } 
    else 
    { 
     holder = (ViewHolder) convertView.getTag(); 
    } 


    Button b = (Button) convertView.findViewById(R.id.btn_quotaions_claims); 
    b.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(parent.getContext(), QuotationList.class); 
      intent.putExtra("quot_id", holder.cliamid.getText().toString()); 
      Constants.claim_id = holder.cliamid.getText().toString(); 
      context.startActivity(intent); 
     } 
    }); 

    Button c = (Button) convertView.findViewById(R.id.btn_claimdetail_claims); 
    c.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      StringTokenizer tokens = new StringTokenizer(holder.ref.getText().toString(), "/"); 
      String first = tokens.nextToken(); 
      String two = tokens.nextToken(); 
      Intent intent = new Intent(parent.getContext(), Claimform.class); 
       intent.putExtra("ref_id", first); 
       intent.putExtra("typeofintimation", holder.natureofloss.getText().toString()); 
       Constants.key_id = first; 
       context.startActivity(intent); 
     } 
    }); 


    abc aa = alldata.get(position); 
    holder.cliamid.setText(aa.getClaimid()); 
    holder.ref.setText(aa.getRef()); 
    holder.policy.setText(filteredData.get(position)); 
    holder.natureofloss.setText(aa.getNatureofloss()); 
    holder.status.setText(aa.getStatus()); 

return convertView; 

} 

//-------------------------------------------------------------------------------- 
    public Filter getFilter() { 
      return mFilter; 
     } 

     private class ItemFilter extends Filter { 
      @Override 
      protected FilterResults performFiltering(CharSequence constraint) { 

       String filterString = constraint.toString().toLowerCase(); 

       FilterResults results = new FilterResults(); 

       final List<String> list = originalData; 

       int count = list.size(); 
       final ArrayList<String> nlist = new ArrayList<String>(count); 

       String filterableString ; 

       for (int i = 0; i < count; i++) { 
        filterableString = list.get(i); 

        if (filterableString.toLowerCase().contains(filterString)) { 
         nlist.add(filterableString); 


        } 
       } 

       results.values = nlist; 
       results.count = nlist.size(); 


       return results; 
      } 

      @SuppressWarnings("unchecked") 
      @Override 
      protected void publishResults(CharSequence constraint, FilterResults results) { 
       filteredData = (ArrayList<String>) results.values; 

       notifyDataSetChanged(); 
      } 

     } 

     public class abc 
     { 
      String claimid; 
      String ref; 
      String policy; 
      String natureofloss; 
      String status; 

      public void setClaimid(String claimid) 
      { 
       this.claimid = claimid; 
      } 
      public void setRef(String ref) 
      { 
       this.ref = ref; 
      } 
      public void setPolicy(String policy) 
      { 
       this.policy = policy; 
      } 
      public void setNatureofLoss(String natureofloss) 
      { 
       this.natureofloss = natureofloss; 
      } 
      public void setStatus(String status) 
      { 
       this.status = status; 
      } 

      public String getClaimid() 
      { 
       String claimid = this.claimid; 
       return claimid; 
      } 
      public String getRef() 
      { 

       String ref = this.ref; 
       return ref; 
      } 
      public String getPolicy() 
      { 

       String Policy = this.policy; 
       return Policy; 
      } 
      public String getNatureofloss() 
      { 

       String Natureofloss = this.natureofloss; 
       return Natureofloss; 
      } 
      public String getStatus() 
      { 

       String Status = this.status; 
       return Status; 
      } 

     } 

}

的EditText事件

searchText.addTextChangedListener(new TextWatcher() { 

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

     @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 

     } 
    }); 
+0

请检查下面我解决方案 –

回答

0

使用这些代码下面几行......它可以帮助你

searchText.addTextChangedListener(new TextWatcher() { 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     // TODO Auto-generated method stub 
     ClaimList.this.lviewAdapter.getFilter().filter(searchText.getText().toString()); 
    } 

    @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 

    } 
}); 
+0

感谢您的回复.. ..我试了一下,但没有奏效......顺便说一句,它成功地发送字符到该类...问题在这里filteredData =(ArrayList )results.values;一些地方 – user3440768

+0

和政策没有改变,因为它获得的位置和文字像.... holder.policy.setText(filteredData.get(position));其他TextViews从类中获取文本,这是我自己的逻辑 – user3440768

+0

你有什么问题?? ??你是不是过滤数据或任何其他问题..告诉我,我会尝试 –

相关问题