Bonjour,
je souhaiterais avoir de l'aide. Pour réaliser un formulaire de recherche j'ai fait ceci:
quand, j'écris dans le formulaire je n'ai aucun résultat; j'ai testé le debug, le text saisi arrive bien dans le filter mais il n y a pas de filtre a l ecran.
si vous pouvez m'aider ....Merci d'avance
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106 package ga.idevtech.rapidfacture.adapter import android.net.Uri import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.Filter import android.widget.Filterable import android.widget.ImageView import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.bumptech.glide.Glide import ga.idevtech.rapidfacture.* import java.util.* import kotlin.collections.ArrayList class ArticleAdapter( val context: MainActivity, list: ArrayList<ArticleModel>, private val layoutId:Int) : RecyclerView.Adapter<ArticleAdapter.viewHolder>(), Filterable { private val articleList = list private val searchList = articleList //Boite pour ranger tous les composant a controler class viewHolder(view: View): RecyclerView.ViewHolder(view){ val Imagearticle = view.findViewById<ImageView>(R.id.item_image) val Nomarticle: TextView? = view.findViewById(R.id.name_item) val Descriptionarticle: TextView? = view.findViewById(R.id.description_item) val Prixarticle: TextView? = view.findViewById(R.id.prix_item) } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): viewHolder { val view = LayoutInflater .from(parent.context) .inflate(layoutId, parent,false) return viewHolder(view) } override fun onBindViewHolder(holder: viewHolder, position: Int) { //recuperer les information de l'article val currentArticle = articleList[position] //recuperer le repository val repo = ArticleRepository() //utiliser glide pour recupérer l'image à partir Glide.with(context).load(Uri.parse(currentArticle.imageUrl)).into(holder.Imagearticle) // Log.i("DEBUGAGE", "le onBindViewHolder" + position) //Mettre le nom de l'article holder.Nomarticle?.text = currentArticle.nom //Mettre la description de l'article holder.Descriptionarticle?.text = currentArticle.description //Mettre la description de l'article holder.Prixarticle?.text = currentArticle.prix.toString() //interaction lors du clic sur un article holder.itemView.setOnClickListener { //afficher la popup ArticlePopop(this, currentArticle).show() } } override fun getItemCount(): Int = articleList.size override fun getFilter(): Filter { return object : Filter() { override fun performFiltering(constraint: CharSequence): FilterResults { val filteredList = ArrayList<ArticleModel>() if (constraint.toString() == "") { filteredList.addAll(searchList) Log.d("testttttttttttttt1", constraint.toString()) } else { val filterPattern = constraint.toString().toLowerCase(Locale.ROOT).trim() searchList.forEach { if (it.nom.toLowerCase(Locale.ROOT).contains(filterPattern)) { filteredList.add(it) // Log.d("testttttttttttttt2", constraint.toString()) Log.d("testttttttttttttt3", it.nom.toString()) } } } val result = FilterResults() result.values = filteredList return result } override fun publishResults(constraint: CharSequence?, results: FilterResults?) { articleList.clear() articleList.addAll(results!!.values as List<ArticleModel>) notifyDataSetChanged() } } } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 package ga.idevtech.rapidfacture.fragments import android.os.Bundle import android.util.Log import android.view.* import android.view.inputmethod.EditorInfo import androidx.appcompat.widget.SearchView import androidx.fragment.app.Fragment import androidx.recyclerview.widget.RecyclerView import ga.idevtech.rapidfacture.ArticleModel import ga.idevtech.rapidfacture.ArticleRepository.Singleton.articleList import ga.idevtech.rapidfacture.MainActivity import ga.idevtech.rapidfacture.R import ga.idevtech.rapidfacture.adapter.ArticleAdapter import ga.idevtech.rapidfacture.adapter.ArticleItemDecoration class ArticleFragment( private val context:MainActivity ): Fragment() { override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { val view = inflater?.inflate(R.layout.fragment_article, container, false) // recuperer le recyclerview // val horizontalRecyclerView = view.findViewById<RecyclerView>(R.id.horizontal_recycler_view) // horizontalRecyclerView.adapter = ArticleAdapter(context, articleList, R.layout.item_horizontal_article) //Recuperer le second recyclerView val verticalRecyclerView = view.findViewById<RecyclerView>(R.id.vertical_recycler_view) verticalRecyclerView.adapter = ArticleAdapter(context, articleList,R.layout.item_vertical_article) verticalRecyclerView.addItemDecoration(ArticleItemDecoration()) return view } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 package ga.idevtech.rapidfacture class ArticleModel ( val id: String = "art0", val nom: String = "Nom Article", val description: String = "Description de l'article", val prix: Long = 250, val imageUrl: String = "http://via.placeholder.com/300.png", var liked: Boolean = false )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113 package ga.idevtech.rapidfacture import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.util.Log import android.view.Menu import android.view.MenuInflater import android.view.MenuItem import android.view.inputmethod.EditorInfo import android.widget.TextView import android.widget.Toast import androidx.appcompat.app.AppCompatDelegate import androidx.appcompat.widget.SearchView import androidx.fragment.app.Fragment import com.google.android.material.bottomnavigation.BottomNavigationView import ga.idevtech.rapidfacture.ArticleRepository.Singleton.articleList import ga.idevtech.rapidfacture.adapter.ArticleAdapter import ga.idevtech.rapidfacture.fragments.* class MainActivity : AppCompatActivity() { private lateinit var adapter: ArticleAdapter override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO) adapter = ArticleAdapter(this, articleList, R.layout.item_vertical_article) //importer la boutomview val navigationView = findViewById<BottomNavigationView>(R.id.navigation_view_bottom) navigationView.setOnNavigationItemSelectedListener { when(it.itemId) { R.id.home_article ->{ loadFragment(ArticleFragment(this), R.string.page_title_article) return@setOnNavigationItemSelectedListener true } R.id.home_client->{ loadFragment(ClienFragment(this), R.string.page_title_client) return@setOnNavigationItemSelectedListener true } R.id.home_add->{ loadFragment(AddArticleFragment(this), R.string.page_add_article) return@setOnNavigationItemSelectedListener true } /** R.id.home_devis->{ loadFragment(DevisFragment(this), R.string.page_title_devis) return@setOnNavigationItemSelectedListener true } R.id.home_facture->{ loadFragment(FactureFragment(this), R.string.page_title_facture) return@setOnNavigationItemSelectedListener true }**/ else ->false } } loadFragment(ArticleFragment(this), R.string.page_title_article) } private fun loadFragment(fragment: Fragment, string: Int) { //charger notre repository val repo = ArticleRepository() //Actualiser le titre de la page findViewById<TextView>(R.id.page_title).text = resources.getString(string) //Mettre a jour les donnees repo.updateData { //injecter le fragment dans la boite (fragment_contenaire) val transaction = supportFragmentManager.beginTransaction() transaction.replace(R.id.fragment_container, fragment) transaction.addToBackStack(null) transaction.commit() } } override fun onCreateOptionsMenu(menu: Menu): Boolean { val inflater: MenuInflater = menuInflater inflater.inflate(R.menu.menu_main, menu) val item = menu?.findItem(R.id.searchView_MenuMain) val searchView: SearchView = item?.actionView as SearchView searchView.imeOptions = EditorInfo.IME_ACTION_DONE searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener { override fun onQueryTextSubmit(query: String?): Boolean { return false } override fun onQueryTextChange(newText: String?): Boolean { adapter.filter.filter(newText) // Toast.makeText(getApplicationContext(), "Hello 1", Toast.LENGTH_LONG).show(); // Log.d("testttttttttttttt", newText) return false } }) return true } override fun onOptionsItemSelected(item: MenuItem): Boolean { return true } }
Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/searchView_MenuMain" android:title="search" android:icon="@drawable/ic_search" app:showAsAction="ifRoom|collapseActionView" app:actionViewClass="androidx.appcompat.widget.SearchView" /> </menu>
Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78 <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="@dimen/item_margin"> <androidx.cardview.widget.CardView android:id="@+id/cardView" android:layout_width="80dp" android:layout_height="80dp" app:cardCornerRadius="7dp" app:cardElevation="4dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> <ImageView android:id="@+id/item_image" android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="centerCrop" android:src="@drawable/trending1" /> </androidx.cardview.widget.CardView> <View android:id="@+id/view_separation" android:layout_width="match_parent" android:layout_height="1dp" android:visibility="invisible" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintTop_toTopOf="parent" /> <TextView android:id="@+id/name_item" style="@style/SubtitleTextStyle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="@dimen/item_margin" android:text="@string/nom_article" app:layout_constraintBottom_toBottomOf="@+id/view_separation" app:layout_constraintStart_toEndOf="@+id/cardView" /> <TextView android:id="@+id/description_item" style="@style/DefaultTextStyle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="@dimen/item_margin" android:text="@string/description_article" app:layout_constraintStart_toEndOf="@+id/cardView" app:layout_constraintTop_toBottomOf="@+id/view_separation" /> <TextView android:id="@+id/prix_item" android:layout_width="wrap_content" android:layout_height="30dp" android:scaleType="centerCrop" android:layout_marginRight="60dp" android:text="@string/prix_article" app:layout_constraintBottom_toBottomOf="@+id/cardView" app:layout_constraintEnd_toEndOf="@+id/view_separation" app:layout_constraintTop_toTopOf="@+id/cardView" /> <View android:id="@+id/view_separation_bas" android:layout_width="match_parent" android:layout_height="10dp" android:visibility="invisible" android:background="@color/black" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- <androidx.recyclerview.widget.RecyclerView android:id="@+id/horizontal_recycler_view" android:layout_width="match_parent" android:layout_height="200dp" android:orientation="horizontal" app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> --> <androidx.recyclerview.widget.RecyclerView android:id="@+id/vertical_recycler_view" android:layout_marginTop="@dimen/item_margin" android:overScrollMode="never" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> </LinearLayout>
Partager