使用操作栏中存在的编辑文本过滤选项卡片段中的列表项
Filter listitem in tab fragment using the edittext present in the actionbar
MainActivity 代码
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代码
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);
}
}
自定义适配器代码
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;
}
}
现在我想使用操作栏中的编辑文本在选项卡片段中的列表视图上实现搜索过滤器。请指导我如何做到这一点。一旦用户输入文本,列表就会开始显示过滤后的项目。
好吧,我终于得到了问题的答案。我所要做的就是在我的主要 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);
}
});
并在我的 LocationTab 中声明一个参数函数。
public void doSearch(CharSequence s) {
// Log.e("TAG","char="+s);
LocationTab.this.adapter.getFilter().filter(s);
}
希望这对像我这样的人有帮助 ;)
MainActivity 代码
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代码
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);
}
}
自定义适配器代码
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;
}
}
现在我想使用操作栏中的编辑文本在选项卡片段中的列表视图上实现搜索过滤器。请指导我如何做到这一点。一旦用户输入文本,列表就会开始显示过滤后的项目。
好吧,我终于得到了问题的答案。我所要做的就是在我的主要 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);
}
});
并在我的 LocationTab 中声明一个参数函数。
public void doSearch(CharSequence s) {
// Log.e("TAG","char="+s);
LocationTab.this.adapter.getFilter().filter(s);
}
希望这对像我这样的人有帮助 ;)