Android RecyclerView不显示问题及按需显示需求求助
问题描述
我在首页添加了SearchView,期望RecyclerView仅在搜索后显示(代码中未设置隐藏,但它却无法显示),同时要保证仅在搜索时显示该RecyclerView,不影响其他按钮的布局。我尝试过设置LinearLayoutManager等多种方案,参考Stack Overflow和ChatGPT的建议后仍未解决。另外,我还有home_fragment.java文件,若相关逻辑在HomeFragment中,是否需要将MainActivity.java中的代码迁移至home_fragment.java?
Adapter类
package com.jhc.ygc; import android.annotation.SuppressLint; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import java.util.List; public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { private List<SearchItems> results; public MyAdapter(List<SearchItems> results) { this.results = results; } @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_search, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(@NonNull ViewHolder holder, @SuppressLint("RecyclerView") int position) { SearchItems item = results.get(position); holder.nameTextView.setText(item.getName()); holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // Perform action when the item is clicked // You can access the selected item using the position parameter SearchItems selectedItem = results.get(position); String selectedName = selectedItem.getName(); // Call your desired method or perform the necessary action with the selected item performAction(selectedItem); } }); } @Override public int getItemCount() { return results.size(); } public class ViewHolder extends RecyclerView.ViewHolder { TextView nameTextView; public ViewHolder(@NonNull View itemView) { super(itemView); nameTextView = itemView.findViewById(R.id.text_name); } } private void performAction(SearchItems item) { // Implement your desired action here // This method will be called when an item is clicked String link = item.getLink(); Character type = item.getType(); switch (type) { case 'v': // Video // Add your video action here break; case 'a': // Audio // Add your audio action here break; case 'q': // Quiz // Add your quiz action here break; case 'e': // Ebook // Add your ebook action here break; default: // Error or fallback action break; } } }
Database类
package com.jhc.ygc; import java.util.ArrayList; import java.util.List; public class Database { private List<SearchItems> myObjects; public Database() { myObjects = new ArrayList<>(); //Grade 6 Video myObjects.add(new SearchItems("Grade 6 Science", "file:///android_asset/interactive-video.html?grade=6&subject=science",'v')); myObjects.add(new SearchItems("Grade 6 Maths", "file:///android_asset/interactive-video.html?grade=6&subject=maths",'v')); myObjects.add(new SearchItems("Grade 6 Tamil", "file:///android_asset/interactive-video.html?grade=6&subject=tamil",'v')); myObjects.add(new SearchItems("Grade 6 English", "file:///android_asset/interactive-video.html?grade=6&subject=english",'v')); myObjects.add(new SearchItems("Grade 6 History", "file:///android_asset/interactive-video.html?grade=6&subject=history",'v')); myObjects.add(new SearchItems("Grade 6 ICT", "file:///android_asset/interactive-video.html?grade=6&subject=ict",'v')); //Grade 7 Video myObjects.add(new SearchItems("Grade 7 Science", "file:///android_asset/interactive-video.html?grade=7&subject=science",'v')); myObjects.add(new SearchItems("Grade 7 Maths", "file:///android_asset/interactive-video.html?grade=7&subject=maths",'v')); myObjects.add(new SearchItems("Grade 7 Tamil", "file:///android_asset/interactive-video.html?grade=7&subject=tamil",'v')); myObjects.add(new SearchItems("Grade 7 English", "file:///android_asset/interactive-video.html?grade=7&subject=english",'v')); myObjects.add(new SearchItems("Grade 7 History", "file:///android_asset/interactive-video.html?grade=7&subject=history",'v')); myObjects.add(new SearchItems("Grade 7 ICT", "file:///android_asset/interactive-video.html?grade=7&subject=ict",'v')); //Grade 8 Video myObjects.add(new SearchItems("Grade 8 Science", "file:///android_asset/interactive-video.html?grade=8&subject=science",'v')); myObjects.add(new SearchItems("Grade 8 Maths", "file:///android_asset/interactive-video.html?grade=8&subject=maths",'v')); myObjects.add(new SearchItems("Grade 8 Tamil", "file:///android_asset/interactive-video.html?grade=8&subject=tamil",'v')); myObjects.add(new SearchItems("Grade 8 English", "file:///android_asset/interactive-video.html?grade=8&subject=english",'v')); myObjects.add(new SearchItems("Grade 8 History", "file:///android_asset/interactive-video.html?grade=8&subject=history",'v')); myObjects.add(new SearchItems("Grade 8 ICT", "file:///android_asset/interactive-video.html?grade=8&subject=ict",'v')); //Grade 9 Video myObjects.add(new SearchItems("Grade 9 Science", "file:///android_asset/interactive-video.html?grade=9&subject=science",'v')); myObjects.add(new SearchItems("Grade 9 Maths", "file:///android_asset/interactive-video.html?grade=9&subject=maths",'v')); myObjects.add(new SearchItems("Grade 9 Tamil", "file:///android_asset/interactive-video.html?grade=9&subject=tamil",'v')); myObjects.add(new SearchItems("Grade 9 English", "file:///android_asset/interactive-video.html?grade=9&subject=english",'v')); myObjects.add(new SearchItems("Grade 9 History", "file:///android_asset/interactive-video.html?grade=9&subject=history",'v')); myObjects.add(new SearchItems("Grade 9 ICT", "file:///android_asset/interactive-video.html?grade=9&subject=ict",'v')); //Grade 10 Video myObjects.add(new SearchItems("Grade 10 Science", "file:///android_asset/interactive-video.html?grade=10&subject=science",'v')); myObjects.add(new SearchItems("Grade 10 Maths", "file:///android_asset/interactive-video.html?grade=10&subject=maths",'v')); myObjects.add(new SearchItems("Grade 10 Tamil", "file:///android_asset/interactive-video.html?grade=10&subject=tamil",'v')); myObjects.add(new SearchItems("Grade 10 English", "file:///android_asset/interactive-video.html?grade=10&subject=english",'v')); myObjects.add(new SearchItems("Grade 10 History", "file:///android_asset/interactive-video.html?grade=10&subject=history",'v')); myObjects.add(new SearchItems("Grade 10 ICT", "file:///android_asset/interactive-video.html?grade=10&subject=ict",'v')); //Grade 11 Video myObjects.add(new SearchItems("Grade 11 Science", "file:///android_asset/interactive-video.html?grade=11&subject=science",'v')); myObjects.add(new SearchItems("Grade 11 Maths", "file:///android_asset/interactive-video.html?grade=11&subject=maths",'v')); myObjects.add(new SearchItems("Grade 11 Tamil", "file:///android_asset/interactive-video.html?grade=11&subject=tamil",'v')); myObjects.add(new SearchItems("Grade 11 English", "file:///android_asset/interactive-video.html?grade=11&subject=english",'v')); myObjects.add(new SearchItems("Grade 11 History", "file:///android_asset/interactive-video.html?grade=11&subject=history",'v')); myObjects.add(new SearchItems("Grade 11 ICT", "file:///android_asset/interactive-video.html?grade=11&subject=ict",'v')); } public List<SearchItems> searchObjects(String query) { List<SearchItems> results = new ArrayList<>(); for (SearchItems object : myObjects) { if (object.getName().toLowerCase().contains(query.toLowerCase())) { results.add(object); } } return results; } }
SearchItems类
package com.jhc.ygc; public class SearchItems { private String name; private String link; private Character type; // AudioBook = a,Video = v, quiz=q,ebook=e (ONLY a,v,q,e) public SearchItems(String name, String link,Character type) { this.name = name; this.link = link; this.type = type; } public String getName() { return name; } public String getLink() { return link; } public Character getType() { return type; } }
item_search.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="200dp" android:gravity="center_vertical"> <TextView android:id="@+id/text_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Item" android:textSize="20dp"/> </FrameLayout>
activity_main.xml 部分代码
<SearchView android:id="@+id/search_bar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/search" android:orientation="vertical" /> <androidx.recyclerview.widget.RecyclerView android:id="@+id/recycler" android:layout_width="match_parent" android:layout_height="200dp" android:visibility="visible" />
内容的提问来源于stack exchange,提问作者Adchayan Sivakumar
相关产品推荐
相关产品推荐

