gpt4 book ai didi

android - 尝试读取字段 'android.view.View android.support.v7.widget.RecyclerView$ViewHolder.itemView'

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:51:55 25 4
gpt4 key购买 nike

我正在尝试延迟随机选择 recyclerview 项目。我需要在 fragment 加载后启动随机选择方法,无需任何用户交互,但出现以下错误。然后我把它放在 ImageView 上点击检查,但我再次遇到同样的异常。这里有人会告诉我我在哪里犯了错误,或者还有什么更好的方法可以实现这一点。下面是我的代码

    package com.apponative.bjja.fragments;

import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.apponative.bjja.R;
import com.apponative.bjja.adapters.AttackGridAdapter;

import java.util.Random;

public class Fragment_AttackGrid extends Fragment {

View v;
RecyclerView grid_attack;
AttackGridAdapter attackGridAdapter;
Bundle b;
int itemCount;
Handler randomHandler;
Runnable randomRunnable;
Random rand;
int randomNum = 0;
long emptyTime;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

v = inflater.inflate(R.layout.fragment_attack_grid, container, false);

setUpViews();

return v;
}

void setUpViews() {

b = getArguments();
itemCount = b.getInt(getString(R.string.item_count));
rand = new Random();
randomHandler = new Handler();

grid_attack = (RecyclerView) v.findViewById(R.id.attack_grid);
RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getActivity(), 4);

grid_attack.setLayoutManager(layoutManager);
attackGridAdapter = new AttackGridAdapter(getActivity(), itemCount);
grid_attack.setAdapter(attackGridAdapter);

v.findViewById(R.id.belt_black).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
selectRandomly();
}
});
}

void selectRandomly() {

for (int i = 0; i < itemCount; i++) {
emptyTime = emptyTime+1000;
randomRunnable = new Runnable() {
@Override
public void run() {
grid_attack.findViewHolderForAdapterPosition(randomNum).itemView.setSelected(false);
randomNum = rand.nextInt((itemCount - 0) + 1) + 0;
grid_attack.findViewHolderForAdapterPosition(randomNum).itemView.setSelected(true);
}
};
randomHandler.postDelayed(randomRunnable, emptyTime);

}
emptyTime = emptyTime+2000;
randomRunnable = new Runnable() {
@Override
public void run() {
grid_attack.findViewHolderForAdapterPosition(randomNum).itemView.performClick();
}
};
randomHandler.postDelayed(randomRunnable, emptyTime);
}

@Override
public void onResume() {
super.onResume();
// selectRandomly();
}
}

一开始我放

selectRandomly()

onResume()

方法,我遇到了异常:

01-27 18:28:44.969 19041-19041/com.apponative.bjja E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.apponative.bjja, PID: 19041
java.lang.NullPointerException: Attempt to read from field 'android.view.View android.support.v7.widget.RecyclerView$ViewHolder.itemView' on a null object reference at com.apponative.bjja.fragments.Fragment_AttackGrid$2.run(Fragment_AttackGrid.java:77)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:155)
at android.app.ActivityThread.main(ActivityThread.java:5696)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1028)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)

根据 Fragment LifeCycle 的 fragment 生命周期onResume() 和 onStart() 方法在创建 View 后调用。我也试过把我的方法放在那里,但没有成功。

最佳答案

如果您的 onCreateViewHolder 方法返回 null,则可能会发生这种情况

关于android - 尝试读取字段 'android.view.View android.support.v7.widget.RecyclerView$ViewHolder.itemView',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41895466/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com