【问题标题】:ListView item long click listener throwing a null pointer exceptionListView 项目长按监听器抛出空指针异常
【发布时间】:2020-12-03 08:30:01
【问题描述】:

我有一个 ListView,它将文件夹中的所有文件作为数组列出到 ListView 中。我似乎在长时间选择 ListView 的单个项目时遇到了问题,当我长按时会抛出一个异常 Attempt to invoke virtual method 'void android.widget.TextView.setTextColor(int)' on a null object reference 我想为选定的子视图背景和该视图内的 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;
                   }
               });
        }
     }

【问题讨论】:

    标签: java android listview


    【解决方案1】:

    您的getItemAtPosition 获取与列表中指定位置关联的数据,而不是View。代替TextView mytext=(TextView)filelist.getChildAt(position); 使用提供的view,即actually the item being clickedListView 中。试试这个:

      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 consist of just a TextView。参考这个Q&A

    【讨论】:

    • 不幸的是视图没有获取文本的方法
    • 将其类型转换为 TextView
    • 贴出代码,这样会更容易
    • 请再次检查答案。我已经编辑过了。
    • 它成功了,我接受你的回答,我希望在 SO 经常见到你
    【解决方案2】:

    我认为TextView mytext=(TextView)filelist.getChildAt(position); mytext 这一行的问题是null,因为当代码尝试从 viewList 获取视图时,分配的值为 null,因此请尝试找出原因。

    【讨论】:

      猜你喜欢
      • 2013-02-08
      • 2016-04-26
      • 1970-01-01
      • 1970-01-01
      • 2021-11-03
      • 2020-11-22
      • 2020-08-10
      • 2013-03-21
      相关资源
      最近更新 更多