Java ListView视图持有者项子视图可见性更改
我有一个带有自定义Java ListView视图持有者项子视图可见性更改,java,android,listview,android-listview,android-arrayadapter,Java,Android,Listview,Android Listview,Android Arrayadapter,我有一个带有自定义阵列适配器的列表视图。问题是我无法在某些选择元素中隐藏(setVisibility(View.GONE))TextView。以下是我的代码中一个最小化的可读摘要部分: public class ListViewAdapter extends ArrayAdapter<ItemModel> { private int listItemLayout; static class ViewHolder { private TextView
阵列适配器的列表视图
。问题是我无法在某些选择元素中隐藏(setVisibility(View.GONE)
)TextView
。以下是我的代码中一个最小化的可读摘要部分:
public class ListViewAdapter extends ArrayAdapter<ItemModel> {
private int listItemLayout;
static class ViewHolder {
private TextView description;
}
public ListViewAdapter(Context context, int layoutId, List<ItemModel> itemList) {
super(context, layoutId, itemList);
this.listItemLayout = layoutId;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ItemModel item = getItem(position);
ViewHolder viewHolder;
if (convertView == null) {
viewHolder = new ViewHolder();
convertView = LayoutInflater.from(getContext()).inflate(listItemLayout, parent, false);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.description = convertView.findViewById(R.id.text_desription);
viewHolder.description.setText(item.getDescription());
if (TextUtils.isEmpty(item.getDescription())) {
viewHolder.description.setVisibility(View.GONE);
}
return convertView;
}
}
公共类ListViewAdapter扩展了ArrayAdapter{
私有int列表项布局;
静态类视窗夹{
私有文本视图描述;
}
公共ListViewAdapter(上下文上下文、int-layoutId、列表项列表){
超级(上下文、布局ID、项目列表);
this.listItemLayout=layoutId;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
ItemModel item=getItem(位置);
持票人持票人;
if(convertView==null){
viewHolder=新的viewHolder();
convertView=LayoutFlater.from(getContext()).inflate(listItemLayout,parent,false);
convertView.setTag(viewHolder);
}否则{
viewHolder=(viewHolder)convertView.getTag();
}
viewHolder.description=convertView.findViewById(R.id.text\u说明);
viewHolder.description.setText(item.getDescription());
if(TextUtils.isEmpty(item.getDescription())){
viewHolder.description.setVisibility(View.GONE);
}
返回视图;
}
}
我做错了什么?如果列表视图
中的项目内容字符串
为空,如何在项目内部隐藏视图?添加if条件的其他部分,以将可见性从消失
更改为可见
,如下代码所示。
public class ListViewAdapter extends ArrayAdapter {
private int listItemLayout;
static class ViewHolder {
private TextView description;
}
public ListViewAdapter(Context context, int layoutId, List itemList) {
super(context, layoutId, itemList);
this.listItemLayout = layoutId;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ItemModel item = getItem(position);
ViewHolder viewHolder;
if (convertView == null) {
viewHolder = new ViewHolder();
convertView = LayoutInflater.from(getContext()).inflate(listItemLayout, parent, false);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.description = convertView.findViewById(R.id.text_desription);
viewHolder.description.setText(item.getDescription());
if (TextUtils.isEmpty(item.getDescription())) {
viewHolder.description.setVisibility(View.GONE);
}else{
viewHolder.description.setVisibility(View.VISIBLE);
}
return convertView;
}
}
公共类ListViewAdapter扩展了ArrayAdapter{
私有int列表项布局;
静态类视窗夹{
私有文本视图描述;
}
公共ListViewAdapter(上下文上下文、int-layoutId、列表项列表){
超级(上下文、布局ID、项目列表);
this.listItemLayout=layoutId;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
ItemModel item=getItem(位置);
持票人持票人;
if(convertView==null){
viewHolder=新的viewHolder();
convertView=LayoutFlater.from(getContext()).inflate(listItemLayout,parent,false);
convertView.setTag(viewHolder);
}否则{
viewHolder=(viewHolder)convertView.getTag();
}
viewHolder.description=convertView.findViewById(R.id.text\u说明);
viewHolder.description.setText(item.getDescription());
if(TextUtils.isEmpty(item.getDescription())){
viewHolder.description.setVisibility(View.GONE);
}否则{
viewHolder.description.setVisibility(View.VISIBLE);
}
返回视图;
}
}
或者
尝试if(item.getDescription()==null | | item.getDescription().trim().length()==0)
代替if(TextUtils.isEmpty(item.getDescription())
添加if条件的其他部分,将可见性从GONE
更改为VISIBLE
,如下代码所示。
public class ListViewAdapter extends ArrayAdapter {
private int listItemLayout;
static class ViewHolder {
private TextView description;
}
public ListViewAdapter(Context context, int layoutId, List itemList) {
super(context, layoutId, itemList);
this.listItemLayout = layoutId;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ItemModel item = getItem(position);
ViewHolder viewHolder;
if (convertView == null) {
viewHolder = new ViewHolder();
convertView = LayoutInflater.from(getContext()).inflate(listItemLayout, parent, false);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.description = convertView.findViewById(R.id.text_desription);
viewHolder.description.setText(item.getDescription());
if (TextUtils.isEmpty(item.getDescription())) {
viewHolder.description.setVisibility(View.GONE);
}else{
viewHolder.description.setVisibility(View.VISIBLE);
}
return convertView;
}
}
公共类ListViewAdapter扩展了ArrayAdapter{
私有int列表项布局;
静态类视窗夹{
私有文本视图描述;
}
公共ListViewAdapter(上下文上下文、int-layoutId、列表项列表){
超级(上下文、布局ID、项目列表);
this.listItemLayout=layoutId;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
ItemModel item=getItem(位置);
持票人持票人;
if(convertView==null){
viewHolder=新的viewHolder();
convertView=LayoutFlater.from(getContext()).inflate(listItemLayout,parent,false);
convertView.setTag(viewHolder);
}否则{
viewHolder=(viewHolder)convertView.getTag();
}
viewHolder.description=convertView.findViewById(R.id.text\u说明);
viewHolder.description.setText(item.getDescription());
if(TextUtils.isEmpty(item.getDescription())){
viewHolder.description.setVisibility(View.GONE);
}否则{
viewHolder.description.setVisibility(View.VISIBLE);
}
返回视图;
}
}
或者
尝试if(item.getDescription()==null | | item.getDescription().trim().length()==0)
如果(TextUtils.isEmpty(item.getDescription())
检查文本中不应有任何空白,而不是if(TextUtils.isEmpty)(item.getDescription())
。试试这个-
if (TextUtils.isEmpty(item.getDescription().trim()) ||item.getDescription().trim().length()==0 ) {
viewHolder.description.setVisibility(View.GONE);
}
else{
viewHolder.description.setVisibility(View.VISIBLE);
}
选中文本中不应出现任何空白。试试这个-
if (TextUtils.isEmpty(item.getDescription().trim()) ||item.getDescription().trim().length()==0 ) {
viewHolder.description.setVisibility(View.GONE);
}
else{
viewHolder.description.setVisibility(View.VISIBLE);
}
也许描述永远不会为空?您是否尝试过将可见性代码放在if条件之外?首先尝试这样做,如果将其放在if条件之外不起作用,那么我建议您将该代码放在runonui线程内。您是否在调试模式下选中了“TextUtils.isEmpty(item.getDescription())?也许你可以改变你的方法。您可以通过(item.getDescription().equals(“”)检查描述。也许描述从来都不是空的?您是否尝试将可见性代码放在if条件之外?首先尝试这样做,如果将其放在if条件之外不起作用,那么我建议您将代码放在runonui线程中。您是否选中了“TextUtils.isEmpty?”(item.getDescription())“在调试模式下?也许您可以更改方法。您可以通过(item.getDescription().equals(“”)检查说明。”。