2015-08-28 53 views
1

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代碼

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代碼

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

現在我想上實現搜索過濾器使用操作欄中的編輯文本顯示在選項卡片段中的列表視圖。請指導我如何做到這一點。只要用戶輸入文本,列表就應該開始顯示已過濾的項目。

回答

0

那麼我終於得到了問題的答案。我所要做的就是在我的主要活動

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

希望這有助於我這樣的人;)