I am implementing autosearchTextView and I am getting data from web service.The API get hit when char value is 3. I refer this link https://github.com/kyasar/markod/blob/master/app/src/main/java/com/dopamin/markod/adapter/ProductSearchAdapter.java. and this is also
When I enter 3 char the publishResults() method trigger and so getting no drop down. I debugged and I found web service get called and but before it This publishResults() method triggered. I have to spend a lot of time to do in R&D. Please Help me out.
mMutualFundAdapter = new PrimaryContractAdapter(CreateNoteActivityNew.this); primary_atv.setThreshold(3);//will start working from 3 character
//setting the adapter data into the AutoCompleteTextView
primary_atv.setAdapter(mMutualFundAdapter);
primary_atv.setLoadingIndicator(
(android.widget.ProgressBar) findViewById(R.id.pb_loading_indicator));
primary_atv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
PrimaryContract primaryContract = (PrimaryContract) adapterView.getItemAtPosition(position);
primary_atv.setText(primaryContract.getContract());
}
});
Adapter -
public PrimarySearchAdapter(Context context, ArrayList<PrimaryContract> resultList) {
mContext = context;
this.resultList = resultList;
}
@Override
public int getCount() {
return resultList.size();
}
@Override
public PrimaryContract getItem(int index) {
return resultList.get(index);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.drop_down_layout, parent, false);
}
((TextView) convertView.findViewById(R.id.heading)).setText(getItem(position).getText());
return convertView;
}
@Override
public Filter getFilter() {
Filter filter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults filterResults = new FilterResults();
if (constraint != null) {
findData(mContext, constraint.toString());
if (contractArrayList != null && contractArrayList.size()>0) {
// Assign the data to the FilterResults
filterResults.values = contractArrayList;
filterResults.count = contractArrayList.size();
}
}
return filterResults;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
if (results != null && results.count > 0) {
resultList = ( ArrayList<PrimaryContract>) results.values;
notifyDataSetChanged();
} else {
notifyDataSetInvalidated();
}
}};
return filter;
}
private void findData(Context context, String bookTitle) {
// this finddata() for getting response from REST API using retrofit
contractArrayList = new ArrayList<>();
String url = "http://se.com/publisher_api/primaryContracts?keyword=";
url = url + bookTitle;
ApiRequestResponse apiRequestResponse = new ApiRequestResponse();
final OnResponseReceiveEvent onResponseReceiveEvent = new OnResponseReceiveEvent() {
@Override
public void getSuccess(Object obj) {
if (obj != null) {
createNoteModel = (CreateNoteModel) obj;
if (createNoteModel.getPrimaryContracts() != null && createNoteModel.getPrimaryContracts().size()>0){
if (contractArrayList != null) {
contractArrayList.clear();
contractArrayList = createNoteModel.getPrimaryContracts();
}
}
}
notifyDataSetChanged();
}
// I have followed as I given two links
@Override
public Object getFailure() {
return null;
}
};
apiRequestResponse.getDropDownData(onResponseReceiveEvent, url);
}
}