Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android ListView:空时不显示TextView_Java_Android_Listview_Textview - Fatal编程技术网

Java Android ListView:空时不显示TextView

Java Android ListView:空时不显示TextView,java,android,listview,textview,Java,Android,Listview,Textview,我有一个ListView,它显示用户从活动中动态生成的数组。基本上,该程序是一个计时器,用户可以选择一个时间,他们希望一个警报响起,还提供了一个描述,他们应该做什么时,警报响起 我使用SimpleAdapter设置ListView,它调用alarm_list_item.xml,其中包含两个TextView和一个图标,我希望为列表中的每个项目显示该图标 adapter = new AlarmListAdapter(this, stringArray, R.layout.alarm_list_ite

我有一个ListView,它显示用户从活动中动态生成的数组。基本上,该程序是一个计时器,用户可以选择一个时间,他们希望一个警报响起,还提供了一个描述,他们应该做什么时,警报响起

我使用SimpleAdapter设置ListView,它调用alarm_list_item.xml,其中包含两个TextView和一个图标,我希望为列表中的每个项目显示该图标

adapter = new AlarmListAdapter(this, stringArray, R.layout.alarm_list_item, new String[] {"name", "alert"}, new int[] {R.id.ListViewItem, R.id.ListViewItemSub});
当用户选择不为报警添加自定义对话框时,我希望将alarm_list_item.xml中文本视图的可见性设置为GONE,这样它就不会在列表中显示为空白。当我试图在活动中设置此参数时,我会得到一个NullPointerException,因为我假设xml文件实际上不是一个对象,但或多或少只是用作ListView的引用。有没有办法做到这一点

到目前为止,我通过将文本设置为“No Custom Notification Set”来解决这个问题,但我希望有一个更干净的选项,在不使用该行时将其全部删除

报警\u列表\u item.xml

<?xml version="1.0" encoding="utf-8"?>

您将需要超越适配器或方法:在那里,您可以设置所需视图的可见性。是一个格式不好(但技术上正确)的示例

编辑:尝试以下操作:

@Override
        public View getView(int position, View convertView, ViewGroup parent)
        {
View v = super.getView(position, convertView, parent);
                        if(list.get(position).get("alert") == ""){      
        v.findViewById(R.id.ListViewItem).setVisibility(View.GONE);
        v.findViewById(R.id.ListViewItemSub).setVisibility(View.GONE);
    }
return convertView;

}
@Override
public View getView(int position, View convertView, ViewGroup parent) {

View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    v = vi.inflate(R.layout.alarm_list_item, null);
}


if(list.get(position).get("alert") == ""){    
    v.findViewById(R.id.ListViewItemSub).setVisibility(View.GONE);
}

return convertView;

}

试着这样做:

@Override
        public View getView(int position, View convertView, ViewGroup parent)
        {
View v = super.getView(position, convertView, parent);
                        if(list.get(position).get("alert") == ""){      
        v.findViewById(R.id.ListViewItem).setVisibility(View.GONE);
        v.findViewById(R.id.ListViewItemSub).setVisibility(View.GONE);
    }
return convertView;

}
@Override
public View getView(int position, View convertView, ViewGroup parent) {

View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    v = vi.inflate(R.layout.alarm_list_item, null);
}


if(list.get(position).get("alert") == ""){    
    v.findViewById(R.id.ListViewItemSub).setVisibility(View.GONE);
}

return convertView;

}
我明白了

SimpleAdapter getView覆盖代码:

    @Override
public View getView(int position, View convertView, ViewGroup parent) {

View v = convertView;
if (v == null) {
    LayoutInflater vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    v = vi.inflate(R.layout.alarm_list_item, null);
}


if(list.get(position).get("alert") == null){    
    v.findViewById(R.id.ListViewItemSub).setVisibility(View.GONE);
}

return super.getView(position, convertView, parent);

}

问题在于返回语句。我需要返回超级值。

那么在adapater中重写getView之后,我是否应该使用for循环来迭代填充ListView的ArrayList并检查该值是否为null?如果为空,是否需要充气视图以编辑可见性设置?适配器扩展了SimpleAdapter,因此我似乎无法使用findViewById引用TextView。
getView
将为适配器中的每个项调用一次。对于每个调用,都会向您传递当前视图和位置:如果传递的视图为空,则从XML中膨胀视图,然后根据需要调整可见性。我更新了我的问题以包含适配器代码。每次尝试运行此操作时,我都会收到一个nullpointerexception。getView是否实际运行了传递到适配器的数组中的每个项?如果继续出现异常,请修改您的问题以包含logcat输出:使您更容易明确地找出问题所在。使用此代码获得相同的logcat错误。错误是围绕着能够获得视图,但是我不明白为什么它不能看到视图。我在adapter类中运行它,而不是在与适配器关联的活动中运行它。这是一个问题吗?嗯,我现在真的不知道是什么导致了它。由于单元格的重用,您需要放置一个
else
子句,让它再次可见。
@Override
public View getView(int position, View convertView, ViewGroup parent) {

View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    v = vi.inflate(R.layout.alarm_list_item, null);
}


if(list.get(position).get("alert") == ""){    
    v.findViewById(R.id.ListViewItemSub).setVisibility(View.GONE);
}

return convertView;

}
    @Override
public View getView(int position, View convertView, ViewGroup parent) {

View v = convertView;
if (v == null) {
    LayoutInflater vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    v = vi.inflate(R.layout.alarm_list_item, null);
}


if(list.get(position).get("alert") == null){    
    v.findViewById(R.id.ListViewItemSub).setVisibility(View.GONE);
}

return super.getView(position, convertView, parent);

}