Java ListView项长时间单击侦听器引发空指针异常

Java ListView项长时间单击侦听器引发空指针异常,java,android,listview,Java,Android,Listview,我有一个ListView,它将文件夹中的所有文件作为数组列出到ListView中。我似乎在长时间选择ListView的单个项时遇到了问题,因为当我长时间单击时,抛出了一个异常,试图在空对象引用上调用虚拟方法“void android.widget.TextView.setTextColor(int)” 我想为选定的子视图背景和该视图中TextView的文本颜色实现颜色更改。。。 以下是我试图实现的AdapterView的完整代码。OnLongItemClickListener public cl

我有一个ListView,它将文件夹中的所有文件作为数组列出到ListView中。我似乎在长时间选择ListView的单个项时遇到了问题,因为当我长时间单击时,抛出了一个异常,
试图在空对象引用上调用虚拟方法“void android.widget.TextView.setTextColor(int)”
我想为选定的子视图背景和该视图中TextView的文本颜色实现颜色更改。。。 以下是我试图实现的
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;
                   }
               });
        }
     }
public class video\u player扩展AppCompatActivity实现了GestureDetector.OnTestureListener{
ListView文件列表;
列出文件;
@RequiresApi(api=Build.VERSION\u CODES.Q)
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.medias_combine);
filelist=(ListView)findViewById(R.id.filelist);
files=newarraylist();
//定义要从中读取文件的文件夹
文件存储=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY\u下载);
File[]myfiles=store.listFiles();
//将文件名添加到ArrayList

对于(inti=0;i我认为这行的问题在于
TextView mytext=(TextView)filelist.getChildAt(position)
mytext
null
因为当code试图从视图列表中获取视图时,分配的值为null,所以请尝试找出原因。

您获取与列表中指定位置相关联的数据,而不是
视图
。而不是
TextView mytext=(TextView)filelist.getChildAt(position)
使用
列表视图中提供的
视图
。请尝试以下操作:

  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;
    }
public boolean长单击(AdapterView父视图、视图视图、整型位置、长id){
if(位置==id){
视图.setBackgroundColor(颜色.白色);
TextView mytext=(TextView)视图;
mytext.setTextColor(Color.parseColor(#6600cc));
}否则{
view.setBackgroundColor(Color.parseColor(#6600cc));
TextView mytext=(TextView)视图;
mytext.setTextColor(Color.WHITE);
}
返回true;
}
由于您使用
android.R.layout.simple\u list\u item\u 1
在ListView中膨胀视图项,因此您可以将其键入cast作为
TextView
并在其上调用
setText()


注意:。请参考此项。

View没有获取文本的方法。不幸的是,将其键入文本视图发布代码,这样会更容易。请再次检查答案。我已对其进行了编辑。它起到了作用,我接受您的答案,我希望在此时能更多地在这里见到您