Android:如何在删除行后刷新tablelayout?

3

我有一个tablelayout,从*.txt文件中检索数据。

对于txt文件中的每一行数据,都会生成一行数据。

假设现在txt文件中有两行数据,那么就会生成两个tablerows。

然后,我添加了一个OnLongPressListener,当调用时,将从txt文件中删除一行数据。

现在是第一个问题:在删除txt文件中的数据后,如何刷新我的tablelayout以反映该更改?

第二个问题是:在解决第一个问题之后,是否可能有某种动画,其中一行将淡出或滑出,而不仅仅是完全消失?

谢谢!


1
你需要接受对你有用的答案,这样下次你问问题时,人们就不会犹豫地发布答案! - Sagar Hatekar
3个回答

4

不确定您是否仍在寻找答案。但我遇到了类似的问题。再加上我被迫使用TableLayout(使用TableLayout编写的代码量很大,而且我不能切换到ListView)。 我的解决方法是使用以下代码从TableLayout中删除所有视图:

`tableLayout.removeAllViews();`

但是,如果删除后的行数发生了巨大变化,那就不起作用了。我还需要使用处理程序来使我的视图无效。这是我的其余代码。

protected static final int REFRESH = 0;

private Handler _hRedraw;
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.tree_view_activity);

    _hRedraw=new Handler(){
        @Override
        public void handleMessage(Message msg)
        {
            switch (msg.what) {
            case REFRESH:
                redrawEverything();
                break;
            }
        }
    };
    ...
}
private void redrawEverything()
{
    tableLayout.invalidate();
    tableLayout.refreshDrawableState();
}

只有最后一部分需要完成,即向处理程序发送消息以刷新视图。以下是代码:

_hRedraw.sendEmptyMessage(REFRESH);

1

为什么不使用 ListView 呢?它在使用 MVC 模型时可以更好地控制,其中数据集绑定到 View。因此,您可以拥有一个扩展了 BaseAdapter 的类。该类将您的数据绑定到 View,并且该类还具有一个方法:notifyDataSetChanged(),这就是应该解决您的问题的方法。

您可能会发现 notifyDataSetChanged examplecustomListView 有所帮助。

如果您需要进一步的帮助,请告诉我。


我同意使用列表是更好的选择。而且可能会更容易找到/创建动画解决方案。 - Wayner
好的,我尝试了你的建议,但是将我的设置转换为列表视图几乎是不可能的(或者我只是不知道如何正确地做)。我有一个电阻器的背景图片和四个文本视图(每个都没有文本,但具有不同的背景颜色)。你看到这是如何工作的吗?我尝试应用列表视图并自定义我的 own simple_list.xml 以拥有电阻器的背景。但我不知道如何将四个文本视图添加到列表视图的一行中。 - Danny
好的。我不知道你的四个TextView会是什么样子,但是教程中的row.xml已经有两个TextView了,所以你只需要再添加两个,这应该很容易吧? - Sagar Hatekar
请接受帮助过你的答案,这样其他回答者就会知道哪个方法对你有效。祝编码愉快! - Sagar Hatekar

1
通常在 onCreate() 中,我们会做所有显示文本的 UI 相关的工作,尝试将构成 UI 的代码放入一个私有方法 say setUpTabView() 中,并尝试从 onCreate 中调用它,甚至在文本更改时也尝试调用此 setUpTabView() 方法。我在网格视图中采用了这种方法,效果非常好...!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接