从this我问到控制和突出显示一行。其中一个答案是基于自定义适配器,我得到了一系列关于如何执行此操作的链接。当我试图解决这个问题时,我首先遇到了一个问题,我在链接帖子中列出了一个空指针异常。我很快发现getview方法是导致这种情况的原因,并试图通过阅读此处的其他帖子来解决这个问题。到目前为止,我已经停止了错误,但现在listview为空。我的活动是扩展listview,我的代码基于有关创建文件资源管理器的文章:File Explorer Link
在本例的GetDir方法中,我调用自定义适配器,然后在getview中执行此操作:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View viewnull = convertView;
if (viewnull == null) {
LayoutInflater vrow;
vrow = LayoutInflater.from(getContext());
viewnull = vrow.inflate(R.layout.row, null);
}
if (currpos == position) {
((TextView)viewnull).setBackgroundColor(Color.BLUE);
}
return viewnull;
}
由于我不打算自定义列表的实际视图,我只需要能够列出文件夹和文件以及允许其他帖子中给出的代码工作,但直到我可以将列表添加到工作,我无法继续下去。
修改 适配器设置如下:
fl = new FileListAdapter(this,R.layout.row,itemi);
setListAdapter(fl);
我确实尝试在getview中设置文本视图,如下所示:
TextView rowtext = (TextView)viewnull.findViewById(R.id.rowtext);
编辑2整个适配器代码:
public class FileListAdapter extends ArrayAdapter<String> {
private List<String> itemsll; // Probably not needed
public FileListAdapter(Context context, int row,
List<String> iteml) {
super(context,row,iteml);
// TODO Auto-generated constructor stub
this.itemsll = iteml; // like wise probably not needed
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View viewnull = convertView;
if (viewnull == null) {
LayoutInflater vrow;
vrow = LayoutInflater.from(getContext());
viewnull = vrow.inflate(R.layout.row, null);
String currow = itemsll.get(position);
TextView rowtext = (TextView)viewnull.findViewById(R.id.rowtext);
}
if (currpos == position) {
((TextView)viewnull).setBackgroundColor(Color.BLUE);
}
return viewnull;
}
public void setSelectedPosition( int pos )
{
currpos = pos; // selectedPos is global variable to handle clicked position
// inform the view of this change
notifyDataSetChanged();
}
}
编辑3:getDiri方法:
private void getdiri(String dirpathi) {
mypathi.setText("Current Folder:"+dirpathi);
getcurpathi = dirpathi;
itemi = new ArrayList<String>();
pathi = new ArrayList<String>();
fullpathi = new ArrayList<String>();
File fi = new File(dirpathi);
File[] filesi = fi.listFiles();
if(!dirpathi.equals(rooti))
{
itemi.add(rooti);
pathi.add(rooti);
itemi.add("../");
pathi.add(fi.getParent());
}
for(int i=0; i < filesi.length; i++)
{
File filei = filesi[i];
if(!filei.isHidden() && filei.canRead()){
if(filei.isDirectory()){
pathi.add(filei.getPath());
itemi.add(filei.getName() + "/");
} else {
itemi.add(filei.getName());
pathi.add(filei.getName());
}
}
}
fl = new FileListAdapter(this,R.layout.row,itemi);
setListAdapter(fl);
}
编辑 4:针对这个问题,我发现列表没有显示文件夹或文件的描述,行是空白但如果点击它们就会移动到文件夹中它现在有反对它的描述。
编辑 5:为getview添加了代码
我现在添加了以下内容:
rowtext.setText(currow);
之后:
String currow = itemsll.get(position);
TextView rowtext = (TextView)viewnull.findViewById(R.id.rowtext);
但是,虽然我现在得到了列表,但如果我进入一个包含多个文件的文件夹,它似乎会复制文件和文件夹。
编辑 6:现在整理出来,现在整个getView方法:
public class FileListAdapter extends ArrayAdapter<String> {
private List<String> itemsll;
public FileListAdapter(Context context, int row,
List<String> iteml) {
super(context,row,iteml);
// TODO Auto-generated constructor stub
this.itemsll = iteml;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View viewnull = convertView;
if (viewnull == null) {
LayoutInflater vrow;
vrow = LayoutInflater.from(getContext());
viewnull = vrow.inflate(R.layout.row, null);
}
String currow = itemsll.get(position);
TextView rowtext = (TextView)viewnull.findViewById(R.id.rowtext);
rowtext.setText(currow);
if (currpos == position) {
rowtext.setBackgroundColor(Color.BLUE);
}
return viewnull;
}