Ich habe eine Aktivität, die aus zwei Hauptelementen besteht: einem RecyclerView und einem ListView. Der RecyclerView fungiert als Filter und das Auswählen/Entfernen von Elementen in diesem wird sich auf den Inhalt des ListView auswirken. Alles funktioniert gut, bis ich versucht habe, den onClickListener auf dem RecyclerView zu implementieren und erkannte, dass das keine Option ist.Aktivität aktualisieren, wenn Sie auf RecyclerView klicken
Ich habe versucht, den Weg der Einstellung eines OnClickListener innerhalb des ViewHolder hinunterzugehen, aber es muss eine Funktion innerhalb der Hauptaktivität aufrufen und es listView aktualisieren. Eine solche Interaktion löst den folgenden Fehler:
java.lang.NullPointerException
at android.support.v7.app.AppCompatDelegateImplBase.<init>(AppCompatDelegateImplBase.java:117)
at android.support.v7.app.AppCompatDelegateImplV9.<init>(AppCompatDelegateImplV9.java:149)
at android.support.v7.app.AppCompatDelegateImplV11.<init>(AppCompatDelegateImplV11.java:29)
at android.support.v7.app.AppCompatDelegateImplV14.<init>(AppCompatDelegateImplV14.java:54)
at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:202)
at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:183)
at android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:519)
at android.support.v7.app.AppCompatActivity.findViewById(AppCompatActivity.java:190)
at .newsScreen._$_findCachedViewById(newsScreen.kt)
at .newsScreen.filterNews(newsScreen.kt:71)
at Cells.NewsFeedList$NewsSource$1.onClick(News Lists.kt:84)
Angenommen, es Sinn macht, da ich versuche UI für den Zugriff auf von außerhalb seiner Klasse, aber ich konnte nicht finden, Alternativen zu.
RecyclerView Adapter:
class NewsFeedList() : RecyclerView.Adapter<NewsFeedList.NewsSource>() {
private var source: List<NewsFeed> = ArrayList()
constructor(s: ArrayList<NewsFeed>) : this() {
source = s
}
class NewsSource : RecyclerView.ViewHolder {
private var mTextView: TextView? = null
constructor(v: View): super(v) {
mTextView = v.title
}
fun bindInfo(news: NewsFeed, view: View, int: Int) {
mTextView!!.text = news.title
view.tag = int
view.setOnClickListener { newsScreen().filterNews(view.tag.toString().toInt()) }
if (news.selected) view.background = ColorDrawable(Color.parseColor(news.color))
else view.background = ColorDrawable(Color.parseColor(design.backgroundColor))
}
}
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): NewsFeedList.NewsSource {
val view = LayoutInflater.from(parent!!.context).inflate(R.layout.newsfeed_list, parent, false)
return NewsSource(view)
}
override fun onBindViewHolder(holder: NewsFeedList.NewsSource, position: Int) {
holder.bindInfo(source[position], holder.itemView, position)
}
override fun getItemCount(): Int {
return source.count()
}
}
in meinem newsScreen Klasse Dann muss ich den RecyclerView Adapter mit neuen Daten
fun filterNews(i: Int) {
newsFeed[i].selected = !newsFeed[i].selected
filter.adapter = NewsFeedList(newsFeed)
}
zugreifen Wenn ich alle Verweise entfernen filtern (RecyclerView), Alles ist in Ordnung, aber der Zweck des onClickListeners besteht darin, den Inhalt der Aktivitäten zu aktualisieren.
Gibt es eine Möglichkeit dies zu erreichen, oder sollte ich RecyclerView auf ein anderes UI-Element umstellen?
Edit: ich versucht habe, eine OnClickListener zum RecyclerView Zugabe, aber es scheint nicht ausgelöst werden. Code:
filter.adapter = NewsFeedList(newsFeed)
filter.layoutManager = LinearLayoutManager([email protected], LinearLayoutManager.HORIZONTAL, false)
filter.setOnClickListener { v: View? ->
filterNews(v!!.tag.toString().toInt())
}
Warum statt OnClickListener nicht verwenden OnItemClickListener? –
Könnten Sie bitte meine aktualisierte Frage überprüfen? Ich bin mit Android nicht so vertraut, also könnte es auch etwas Offensichtliches sein, dass ich vermisse. –
Es tut mir leid, der OnItemClickListener funktioniert mit RecycleView eigentlich nicht so gut. Ich habe Ihnen eine Antwort geschrieben, wie ich das NullPointerException-Problem lösen könnte. –