使用操作栏中存在的编辑文本过滤选项卡片段中的列表项

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);
}

希望这对像我这样的人有帮助 ;)