【问题标题】:How to remove dynamically a row of table using BaseAdapter when a column is empty?当一列为空时,如何使用 BaseAdapter 动态删除一行表?
【发布时间】:2015-12-22 09:13:06
【问题描述】:

我的问题在上面。我的代码如下。 如您所见,有些数据是空的,例如“20:11”、“”、“11:25”…… 我希望当字段为空时立即删除布局膨胀中的行,或者当字段为非空时动态创建更好的解决方案。

public class Zlecenia extends Activity {

    ListView listview;

    ArrayList<ListData> myList = new ArrayList<>();

    String[] strefa = new String[]{
            "Jerozolimskie 20/22", "Title 2", "Title 3", "Title 4",
            "Title 5", "Title 6", "Title 7", "Title 8"
    };
    String[] adres = new String[]{
            "Desc 1", "Desc 2", "Desc 3", "Desc 4",
            "Desc 5", "Desc 6", "Desc 7", "Desc 8"
    };
    String[] data = new String[]{
            "20:11", "", "11:25", "", "15:11", "11:25", "15:11", "11:25"
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.zlecenia);

        listview = (ListView) findViewById(R.id.listView);

        for (int i = 0; i < strefa.length; i++) {
            ListData ld = new ListData();
            ld.setStrefa(strefa[i]);
            ld.setAdres(adres[i]);
            ld.setData(data[i]);
            myList.add(ld);
        }

        listview.setAdapter(new MyBaseAdapter(this, myList));

    }

}

和 BaseAdapter:

public class MyBaseAdapter extends BaseAdapter {

// Other methods of extends BaseAdapter
...

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

        if (convertView == null) {
            convertView = inflater.inflate(R.layout.zlecenia_lista, parent, false);
            mViewHolder = new MyViewHolder(convertView);
            convertView.setTag(mViewHolder);
        } else {
            mViewHolder = (MyViewHolder) convertView.getTag();
        }

        ListData currentListData = getItem(position);

        mViewHolder.strefa.setText(currentListData.getStrefa());
        mViewHolder.adres.setText(currentListData.getAdres());
        mViewHolder.data.setText(currentListData.getData());

        return convertView;
    }

    private class MyViewHolder {
        TextView strefa, adres, data;

        public MyViewHolder(View item) {
            strefa = (TextView) item.findViewById(R.id.strefa);
            adres = (TextView) item.findViewById(R.id.adres);
            data = (TextView) item.findViewById(R.id.data);
        }
    }

}

【问题讨论】:

  • 您可以在添加列表时检查 id 任何字段是否为空。如果为空,请不要添加它。它不会反映在您的列表视图中
  • MyBaseAdapter 类中的 findViewById 标记为红色,所以找不到任何 ID

标签: java android baseadapter layout-inflater


【解决方案1】:

所以如果数据等于“”,您希望列表的所有行(项目)都被删除(隐藏)

这是我的建议:

public class MyBaseAdapter extends BaseAdapter {

// Other methods of extends BaseAdapter
...

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

        if (convertView == null) {
            convertView = inflater.inflate(R.layout.zlecenia_lista, parent, false);
            mViewHolder = new MyViewHolder(convertView);
            convertView.setTag(mViewHolder);
        } else {
            mViewHolder = (MyViewHolder) convertView.getTag();
        }

        ListData currentListData = getItem(position);

        mViewHolder.strefa.setText(currentListData.getStrefa());
        mViewHolder.adres.setText(currentListData.getAdres());
        mViewHolder.data.setText(currentListData.getData());
        // try this
        if(currentListData.getData().equals("")) {
              convertView.setVisibility(View.GONE) // all the row is hided
        }else {
              convertView.setVisibility(View.VISIBLE) // display the row
        }
        return convertView;
    }

    private class MyViewHolder {
        TextView strefa, adres, data;

        public MyViewHolder(View item) {
            strefa = (TextView) item.findViewById(R.id.strefa);
            adres = (TextView) item.findViewById(R.id.adres);
            data = (TextView) item.findViewById(R.id.data);
        }
    }

}

希望对你有帮助,如有问题请留言!

祝你好运!

【讨论】:

  • 每一项都是一个表格。我只想隐藏项目中的一行,而不是那个项目。我的表有三行两列。当字符串为空时,我想隐藏这一行。
  • 我做到了!相反 convertView.setVisibility(View.GONE) 我把 convertView.findViewById(R.id.rowdata).setVisibility(View.GONE);谢谢!
  • 我不知道您的项目中有三行是的 findviewbyId() 会起作用,请不要忘记将答案设为已解决,祝您好运!
  • 是的,我在一个元素中有三行。我注意到我的最后一项有隐藏行,但数据非空。为什么?当我删除此条件时: if (convertView == null) { ... then 很好。如果需要这个条件?
  • 如果删除条件对您有效,那么您可以直接删除,条件只是为了优化,因为每一行都被膨胀并且没有被破坏,但如果您的项目(行)不使用,它将再次使用't 包含这么多视图并且您的列表中没有这么多行,您不会注意到任何变化
猜你喜欢
  • 2016-09-27
  • 1970-01-01
  • 2013-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-12
  • 1970-01-01
相关资源
最近更新 更多