MainActivitycode
public class MainActivity extends ActionBarActivity {
// Declaring Your View and Variables
Toolbar toolbar;
ViewPager pager;
ViewPagerAdapter adapter;
SlidingTabLayout tabs;
Tab1 tab1obj=new Tab1();
CharSequence Titles[]={"Locations","Lines"};
int Numboftabs =2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final TextView inputSearch = (TextView) findViewById(R.id.inputSearch);
// Creating The Toolbar and setting it as the Toolbar for the activity
inputSearch.setHint("Where do you want to go?");
toolbar = (Toolbar) findViewById(R.id.tool_bar);
setSupportActionBar(toolbar);
// Creating The ViewPagerAdapter and Passing Fragment Manager, Titles fot the Tabs and Number Of Tabs.
adapter = new ViewPagerAdapter(getSupportFragmentManager(),Titles,Numboftabs);
// Assigning ViewPager View and setting the adapter
pager = (ViewPager) findViewById(R.id.pager);
pager.setAdapter(adapter);
pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
if(position==0)
inputSearch.setHint("Where do you want to go?");
else
inputSearch.setHint("Search for bus route lines");
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
// Assiging the Sliding Tab Layout View
tabs = (SlidingTabLayout) findViewById(R.id.tabs);
tabs.setDistributeEvenly(true); // To make the Tabs Fixed set this true, This makes the tabs Space Evenly in Available width
// Setting Custom Color for the Scroll bar indicator of the Tab View
tabs.setCustomTabColorizer(new SlidingTabLayout.TabColorizer() {
@Override
public int getIndicatorColor(int position) {
return getResources().getColor(R.color.tabsScrollColor);
}
});
// Setting the ViewPager For the SlidingTabsLayout
tabs.setViewPager(pager);
}
}
Tab1 code
public class Tab1 extends Fragment {
private ListView mListView;
private View rootView;
private ListviewContactAdapter adapter;
private ArrayList<ListviewContactItem> listContact;
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,@Nullable Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.tab1, container, false);
mListView = (ListView) rootView.findViewById(R.id.list);
listContact = GetlistContact();
adapter=new ListviewContactAdapter(getActivity(), listContact);
mListView.setAdapter(adapter);
return rootView;
}
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
private ArrayList<ListviewContactItem> GetlistContact(){
ArrayList<ListviewContactItem> contactlist = new ArrayList<ListviewContactItem>();
ListviewContactItem contact = new ListviewContactItem();
contact.setPickUpPoint("xyz");
contact.setArea("xyz City");
contact.setLandmark("xyz xyz");
contact.setStreetName("xyz Road");
contactlist.add(contact);
contact = new ListviewContactItem();
contact.setPickUpPoint("xyz");
contact.setArea("xyz City");
contact.setLandmark("xyz xyz");
contact.setStreetName("xyz Road");
contactlist.add(contact);
contact = new ListviewContactItem();
contact.setPickUpPoint("vxyz");
contact.setArea("xyz City");
contact.setLandmark("near xyz");
contact.setStreetName("xyz Road");
contactlist.add(contact);
}
}
CustomAdapter code
public class ListviewContactAdapter extends BaseAdapter implements Filterable {
private static ArrayList<ListviewContactItem> listContact=null;
private static ArrayList<ListviewContactItem> originaldata=null;
private LayoutInflater mInflater;
private Context context;
public ListviewContactAdapter(Context photosFragment, ArrayList<ListviewContactItem> results){
listContact = results;
originaldata=results;
// mInflater = LayoutInflater.from(photosFragment);
this.context=photosFragment;
this.originaldata = new ArrayList<ListviewContactItem>();
this.originaldata.addAll(results);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return listContact.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return listContact.get(arg0);
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0;
}
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder holder;
LayoutInflater mInflater = (LayoutInflater) context
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
if(convertView == null){
convertView = mInflater.inflate(R.layout.pickup_point_list_layout, null);
holder = new ViewHolder();
holder.txtpickuppoint = (TextView) convertView.findViewById(R.id.rd_header_text);
holder.txtarea = (TextView) convertView.findViewById(R.id.area);
holder.txtlandmark = (TextView) convertView.findViewById(R.id.landmark);
holder.txtstreetname = (TextView) convertView.findViewById(R.id.streetname);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.txtpickuppoint.setText(listContact.get(position).getPickUpPoint());
holder.txtarea.setText(listContact.get(position).getArea());
holder.txtlandmark.setText(listContact.get(position).getLandmark());
holder.txtstreetname.setText(listContact.get(position).getStreetName());
return convertView;
}
static class ViewHolder{
TextView txtpickuppoint, txtarea,txtlandmark,txtstreetname;
}
}
Now i want to implement the search filter on the listview present in the fragment of the tab using the edit text in the actionbar. Please guide me on how to do that. As soon as the user enters the text, the list should start showing filtered items.
Well i have finally got the answer for the question. All i had to do is this in my main activity
inputSearch.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) {
//clear.setVisibility(View.VISIBLE);
}
@Override
public void afterTextChanged(Editable s) {
LocationTab parFrag = (LocationTab) adapter.instantiateItem(pager, 0);
parFrag.doSearch(s);
}
});
and in my LocationTab declare a parameter function.
public void doSearch(CharSequence s) {
// Log.e("TAG","char="+s);
LocationTab.this.adapter.getFilter().filter(s);
}
Hope this helps someone like me ;)