【发布时间】: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;
}
});
}
}
【问题讨论】: