'Searchview appear on each row of listview
the searchview appears on each listview row: Check the scrrenshot attached.
How can i make it apppear only once, at the top.
xml:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Home"
android:padding="30dp"
>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ED0316"
android:textSize="22sp"
android:fontFamily="sans-serif-condensed-light"
android:textColor="#fafafa"
android:id="@+id/txt" />
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<!-- TODO: Update blank fragment layout -->
<SearchView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:queryHint="Search here..."
android:iconifiedByDefault="false"
android:focusedByDefault="t`enter code here`rue"
android:transitionName="Search_box"
android:id="@+id/search_view">
</SearchView>
</FrameLayout>
[enter image description here][1]
public class contractorAdapter extends ArrayAdapter { SearchView searchView; public contractorAdapter(@NonNull Context context, ArrayList ArrayList) { super(context, R.layout.fragment_home, ArrayList);
}
public static class ViewHolder {
SearchView searchView;
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
searchView.setVisibility(position == 0 ? View.VISIBLE : View.GONE); // set it visible if it is at position 0. Else set it invisible
return convertView;
}
Solution 1:[1]
It is very easy. You can just pass the position of the ViewHolder to the ViewHolder class. If the position == 0, set the view visible. Else. set it invisible. It can also be done easily like this:
search_view.setVisibility(position == 0 ? View.VISIBLE : View.GONE);
A sample adapter code could be like this:
public class CustomAdapter extends ArrayAdapter<DataModel> {
private ArrayList<DataModel> dataSet;
Context mContext;
// View lookup cache
private static class ViewHolder {
SearchView searchView;
}
public CustomAdapter(ArrayList<DataModel> data, Context context) {
super(context, R.layout.row_item, data);
this.dataSet = data;
this.mContext=context;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
searchView = convertView.findViewById(R.id.search_view);
searchView.setVisibility(position == 0 ? View.VISIBLE : View.GONE); // set it visible if it is at position 0. Else set it invisible
return convertView;
}
}
Solution 2:[2]
If You Use Recycler view for Showing list then you remove search view from the recycler item and put search view in the main activity.
And If You Not Use Recycler View Then Try Below Code
if (position == 0){
searchView.visibility = View.VISIBLE
}else{
searchView.visibility = View.GONE
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | |
| Solution 2 |
