listview项长单击侦听器引发空指针异常

5q4ezhmt  于 2021-07-05  发布在  Java
关注(0)|答案(2)|浏览(281)

我有一个listview,它将文件夹中的所有文件作为数组列在listview中。我似乎对长时间选择listview的单个项有问题,因为当我长时间单击时,会抛出一个异常 Attempt to invoke virtual method 'void android.widget.TextView.setTextColor(int)' on a null object reference 我想实现一个选定的子视图背景颜色的变化和该视图内的文本视图的文本颜色。。。下面是我试图实现的完整代码 AdapterView.OnLongItemClickListener ```
public class video_player extends AppCompatActivity implements GestureDetector.OnGestureListener {
ListView filelist;
List files;
@RequiresApi(api = Build.VERSION_CODES.Q)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.medias_combine);
filelist = (ListView) findViewById(R.id.filelist);
files=new ArrayList<>();
//Defining folder to read files from
File store = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
File[] myfiles=store.listFiles();
//Adding filenames to the ArrayList
for(int i=0;i<myfiles.length;i++){
//Adding a file filter
if(myfiles[i].isFile()&& myfiles[i].getName().contains(".mp4")){
files.add(myfiles[i].getName());
}
//Build the ListView
ListAdapter myadapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, files);
filelist.setAdapter(myadapter);
//ListView Item long item click listener
filelist.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
for(int i=0;i<filelist.getCount();i++){
//Problem is in this loop
if(position==id){
view.setBackgroundColor(Color.WHITE);
TextView mytext=(TextView)filelist.getChildAt(position);
mytext.setTextColor(Color.parseColor("#6600cc"));
}else{
view.setBackgroundColor(Color.parseColor("#6600cc"));
TextView mytext=(TextView)filelist.getItemAtPosition(position);
// TextView text=(TextView)parent.getItemAtPosition(position);
mytext.setTextColor(Color.WHITE);
}
}

                   return true;
               }
           });
    }
 }
x9ybnkn6

x9ybnkn61#

你的 getItemAtPosition 获取与列表中指定位置关联的数据,而不是 View . 而不是 TextView mytext=(TextView)filelist.getChildAt(position); 使用 view 提供,这实际上是您的 ListView . 请尝试以下操作:

public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
            if(position==id){
                view.setBackgroundColor(Color.WHITE);
                TextView mytext=(TextView)view;
                mytext.setTextColor(Color.parseColor("#6600cc"));
            }else{
                view.setBackgroundColor(Color.parseColor("#6600cc"));
                TextView mytext=(TextView)view;
                mytext.setTextColor(Color.WHITE);
            }

        return true;
    }

因为,你用 android.R.layout.simple_list_item_1 要在listview中膨胀视图项,可以将其类型转换为 TextView 打电话给我 setText() 在上面。
注: android.R.layout.simple_list_item_1 只由一个 TextView . 请参阅本问答。

xvw2m8pv

xvw2m8pv2#

我认为这条线有问题
TextView mytext=(TextView)filelist.getChildAt(position); mytextnull 因为当代码试图从viewlist获取视图时,赋值为null,所以请尝试找出原因。

相关问题