Java ListView项长时间单击侦听器引发空指针异常
我有一个ListView,它将文件夹中的所有文件作为数组列出到ListView中。我似乎在长时间选择ListView的单个项时遇到了问题,因为当我长时间单击时,抛出了一个异常,Java ListView项长时间单击侦听器引发空指针异常,java,android,listview,Java,Android,Listview,我有一个ListView,它将文件夹中的所有文件作为数组列出到ListView中。我似乎在长时间选择ListView的单个项时遇到了问题,因为当我长时间单击时,抛出了一个异常,试图在空对象引用上调用虚拟方法“void android.widget.TextView.setTextColor(int)” 我想为选定的子视图背景和该视图中TextView的文本颜色实现颜色更改。。。 以下是我试图实现的AdapterView的完整代码。OnLongItemClickListener public cl
试图在空对象引用上调用虚拟方法“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没有获取文本的方法。不幸的是,将其键入文本视图发布代码,这样会更容易。请再次检查答案。我已对其进行了编辑。它起到了作用,我接受您的答案,我希望在此时能更多地在这里见到您