私はRecyclerViewとListViewの2つの主要アイテムからなるアクティビティを持っています。 RecyclerViewはフィルタとして機能し、その中の項目を選択/選択解除するとListViewの内容に影響します。私はRecyclerViewにonClickListenerを実装しようとするまで、すべてうまく動作し、それはオプションではないことに気付きました。RecyclerViewをクリックしたときのアクティビティのリフレッシュ
私はViewHolder内でOnClickListenerを設定するルートをダウンしようとしましたが、メインアクティビティ内の関数を呼び出してlistViewを更新する必要があります。任意のこのような相互作用は、次のエラーをトリガ:
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)
は、私はそれのクラスの外からUIにアクセスしようとしていますので、それは理にかなっていると、私はそれに代わるものを見つけることができませんでした。
RecyclerViewアダプタ:
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()
}
}
その後、私のnewsScreenクラス内で私は、私が(RecyclerView)をフィルタリングするすべての参照を削除した場合、新しいデータ
fun filterNews(i: Int) {
newsFeed[i].selected = !newsFeed[i].selected
filter.adapter = NewsFeedList(newsFeed)
}
でRecyclerViewアダプタにアクセスする必要がありますすべては問題ありませんが、onClickListenerの目的はアクティビティー・コンテンツをリフレッシュすることです。
これを達成する方法はありますか、またはRecyclerViewを別のUI要素に変更する必要はありますか?
編集: 私はRecyclerViewにOnClickListenerを追加しようとしましたが、トリガーされていないようです。 コード:あなたのアダプタクラスの
filter.adapter = NewsFeedList(newsFeed)
filter.layoutManager = LinearLayoutManager([email protected], LinearLayoutManager.HORIZONTAL, false)
filter.setOnClickListener { v: View? ->
filterNews(v!!.tag.toString().toInt())
}
はなぜOnClickListenerの代わりにOnItemClickListener使用しない:
P.S:この答えは、ユーザーからの主要な助けを借りて書かれていましたか? –
更新された質問を確認してください。私はAndroidに精通していないので、私が紛失していることが明らかになっているかもしれません。 –
申し訳ありませんが、OnItemClickListenerは実際にはRecycleViewでうまく動作しません。私はあなたにNullPointerExceptionの問題を解決する方法についての答えを書いてきました。 –