0

Tab 뷰에서 검색 필터를 구현하고 싶습니다. sqlite 데이터베이스의 데이터로 Fragment를 구현하고 싶습니다. 그 후 3 일이 지난 후 thisthis이 성공하지 못하고 결국 나는 this 인 것으로 보입니다. 안드로이드 개발에 새로운 친절 이후 깨끗한 아이디어. 나는 그것을 구현하려고했지만 검색 메뉴 항목을 부 풀리지 않을뿐만 아니라 아무런 결과도 얻지 못한다는 것을 알지 못합니다. 어디서 잘못 알 수 있고 어디서 오류가 나지 않습니다. 그리고 그것이 작동하게하는 방법. 여기 안드로이드 탭 뷰 프래그먼트 Recycler 뷰 검색 필터

는 조각 코드

public class TabFragment3 extends Fragment implements SearchView.OnQueryTextListener { 
private RecyclerView recyclerView; 
private LinearLayoutManager layoutManager; 
private UsersAdapter adapter; 
ArrayList<HashMap<String, String>> arrayList; 
DBController controller = new DBController(getContext()); 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view =inflater.inflate(R.layout.tab_fragment_3, container, false); 
    recyclerView = (RecyclerView) view.findViewById(R.id.usersList); 
    recyclerView.setHasFixedSize(true); 
    layoutManager = new LinearLayoutManager(getContext()); 
    recyclerView.setLayoutManager(layoutManager); 
    controller = new DBController(getContext()); 
    arrayList = controller.getAllUsers(); 
    adapter = new UsersAdapter(arrayList,getContext()); 
    recyclerView.setAdapter(adapter); 
    adapter.notifyDataSetChanged(); 
    return view; 
     } 

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    inflater.inflate(R.menu.menu_main, menu); 

    final MenuItem item = menu.findItem(R.id.action_search); 
    final SearchView searchView = (SearchView) MenuItemCompat.getActionView(item); 
    searchView.setOnQueryTextListener(this); 
    MenuItemCompat.setOnActionExpandListener(item,new MenuItemCompat.OnActionExpandListener() { 
     @Override 
     public boolean onMenuItemActionCollapse(MenuItem item) { 
      arrayList = controller.getAllUsers(); 
      // Do something when collapsed 
      adapter.setFilter(arrayList); 
      return true; // Return true to collapse action view 
     } 

     @Override 
     public boolean onMenuItemActionExpand(MenuItem item) { 
      // Do something when expanded 
      return true; // Return true to expand action view 
     } 
    }); 
} 

@Override 
public boolean onQueryTextChange(String query) { 
    return false; 
} 
@Override 
public boolean onQueryTextSubmit(String newText) { 
// Here is where we are going to implement the filter logic 
    newText = newText.toLowerCase(); 
    ArrayList<HashMap<String, String>> userlist = controller.getAllUsers(); 
    ArrayList<HashMap<String, String>> newList= new ArrayList<>(); 
    for(HashMap<String, String> entry : userlist){ 
     String name2= entry.get("number").toLowerCase(); 
     if(name2.contains(newText)){ 
      newList.add(entry); 
     }} 
    adapter.setFilter(newList); 
    return true; 
} 

}

/// adapter class 

public class UsersAdapter extends RecyclerView.Adapter<UsersAdapter.UserViewHolder> { 
ArrayList<HashMap<String, String>> mDataSet= new ArrayList<HashMap<String, String>>(); 
Context ctx; 
public UsersAdapter(ArrayList<HashMap<String, String>> mDataSet,Context ctx) { 
    this.mDataSet = mDataSet; 
    this.ctx=ctx; 
} 
@Override 
public UserViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.user_row, parent, false); 
    UserViewHolder userViewHolder = new UserViewHolder(v,mDataSet,ctx); 
    return userViewHolder; 
} 
@Override 
public void onBindViewHolder(UserViewHolder holder, int position) { 
    holder.name_entry.setText(mDataSet.get(position).get("userId")); 
    holder.email_entry.setText(mDataSet.get(position).get("userName")); 
    holder.icon_entry.setText(""+mDataSet.get(position).get("number")); 
} 
@Override 
public int getItemCount() { 
    return mDataSet.size(); 
} 

public static class UserViewHolder extends RecyclerView.ViewHolder { 
    CardView cardView; 
    TextView name_entry, email_entry, icon_entry; 
    Context ctx; 
    ArrayList<HashMap<String, String>> mDataSet= new ArrayList<HashMap<String, String>>(); 
    public UserViewHolder(View itemView, ArrayList<HashMap<String, String>> mDataSet,Context ctx) { 
     super(itemView); 
     this.mDataSet=mDataSet; 
     this.ctx= ctx; 
     cardView = (CardView) itemView.findViewById(R.id.user_layout); 
     name_entry = (TextView) itemView.findViewById(R.id.name_entry); 
     email_entry = (TextView) itemView.findViewById(R.id.email_entry); 
     icon_entry = (TextView) itemView.findViewById(R.id.icon_entry); 
    } 
} 

@Override 
public void onAttachedToRecyclerView(RecyclerView recyclerView) { 
    super.onAttachedToRecyclerView(recyclerView); 
} 
public void setFilter(ArrayList<HashMap<String, String>> newList){ 
    mDataSet= new ArrayList<HashMap<String, String>>(); 
    mDataSet.addAll(newList); 
    notifyDataSetChanged(); 
} 

}입니다

/// 주요

public class MainActivity extends AppCompatActivity implements TabLayout.OnTabSelectedListener,SearchView.OnQueryTextListener { 
private ViewPager viewPager; 
PagerAdapter adapter; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout); 
    tabLayout.addTab(tabLayout.newTab().setText("Tab 1")); 
    tabLayout.addTab(tabLayout.newTab().setText("Tab 2")); 
    tabLayout.addTab(tabLayout.newTab().setText("Tab 3")); 
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 

    final ViewPager viewPager = (ViewPager) findViewById(R.id.pager); 
    adapter = new PagerAdapter 
      (getSupportFragmentManager(), tabLayout.getTabCount()); 
    viewPager.setAdapter(adapter); 
    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); 
    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
     @Override 
     public void onTabSelected(TabLayout.Tab tab) { 
      viewPager.setCurrentItem(tab.getPosition()); 
     } 

     @Override 
     public void onTabUnselected(TabLayout.Tab tab) { 

     } 

     @Override 
     public void onTabReselected(TabLayout.Tab tab) { 

     } 
    }); 
} 

@Override 
public void onTabSelected(TabLayout.Tab tab) { 
    viewPager.setCurrentItem(tab.getPosition()); 
} 

@Override 
public void onTabUnselected(TabLayout.Tab tab) { 

} 
@Override 
public void onTabReselected(TabLayout.Tab tab) { 
} 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 
    return super.onOptionsItemSelected(item); 
} 

public boolean onQueryTextSubmit(String query) 
{ return false; 
} 
@Override 
public boolean onQueryTextChange(String newText) { 

    return false; 
     } 

}

+0

어떤 문제가 있습니까? 검색 메뉴 항목이 팽창하지 않습니까? 또는 결과를 얻지 못하고 있습니까? 또는 그것은 무엇입니까? – iMDroid

+0

그것은 팽창하지 않기 때문에 심지어 결과는 찾을 수 없습니다 @ Sherl0cked –

답변

2
  1. setHasOptionsMenu(true)을 TabFragment3의 onCreateView() 방법에 추가하십시오. 호스트 활동에 조각에 추가 할 메뉴 옵션이 있음을 알립니다. 또한 super.onCreateOptionsMenu(menu,inflater)를 추가

  2. .. 메뉴 항목 작업으로 거짓 MainActivity의 onOptionsItemSelected(MenuItem item)반환, 내부

  3. @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.menu_main, menu); super.onCreateOptionsMenu(menu,inflater); }

    는 TabFragment3의 onOptionsItemSelected(MenuItem item)에 hanlded 될 것이다.

+0

나는 여전히 개념을 시도했지만 여전히 @ Sherl0cked –

+0

해결되지 않습니다? 여전히 도구 모음에서 검색 아이콘을 볼 수 없습니까? – iMDroid

+0

search 나는 죄책감이있다. 그러나 그것은 팽창하지 않는다. @ Sherl0cked –