从列表活动中删除ContentView

时间:2011-06-12 18:41:17

标签: java android view

我有一个简单的列表活动,显示某个目录的所有文件。当我至少有一个选中时,我想要一个按钮显示在底部的列表中,我不希望它成为列表的一部分,因为那时你必须一直滚动到底部才能看到按钮。我有按钮出现,这很好,但我有一个问题。添加按钮后,我无法将其删除。我希望在没有检查文件时将其删除。这是我的代码

    if(size == 1) {
                Log.d("LIST", "Showing button!");

                Button button = new Button(selectFile.getApplicationContext());
                button.setId(556);
                button.setText("Click me to " + (SHRED_MODE ? "Shred!" : "Encrypt/Delete!"));
                   LayoutParams params = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
                   params.addRule(RelativeLayout.ALIGN_PARENT_TOP);
                 selectFile.addContentView(button, params);
            } else if (size == 0) {
                Log.d("LIST", "Removing Button!");
                View view = selectFile.findViewById(556);
                if(view == null) {
                    Log.d("List", "VIEW IS NULL");
                    return;
                }
                selectFile.getListView().removeView(view);
            }

我没有看到像removeContentView这样的东西,当我使用removeView时,我得到了这个异常

06-12 13:38:33.371: ERROR/AndroidRuntime(13203): java.lang.UnsupportedOperationException: removeView(View) is not supported in AdapterView
06-12 13:38:33.371: ERROR/AndroidRuntime(13203):     at android.widget.AdapterView.removeView(AdapterView.java:489)
06-12 13:38:33.371: ERROR/AndroidRuntime(13203):     at austin.paid.productions.SelectFile$EfficientAdapter$1.onCheckedChanged(SelectFile.java:134)
06-12 13:38:33.371: ERROR/AndroidRuntime(13203):     at android.widget.CompoundButton.setChecked(CompoundButton.java:124)
06-12 13:38:33.371: ERROR/AndroidRuntime(13203):     at android.widget.CompoundButton.toggle(CompoundButton.java:86)
06-12 13:38:33.371: ERROR/AndroidRuntime(13203):     at android.widget.CompoundButton.performClick(CompoundButton.java:98)
06-12 13:38:33.371: ERROR/AndroidRuntime(13203):     at android.view.View$PerformClick.run(View.java:8816)
06-12 13:38:33.371: ERROR/AndroidRuntime(13203):     at android.os.Handler.handleCallback(Handler.java:587)
06-12 13:38:33.371: ERROR/AndroidRuntime(13203):     at android.os.Handler.dispatchMessage(Handler.java:92)
06-12 13:38:33.371: ERROR/AndroidRuntime(13203):     at android.os.Looper.loop(Looper.java:123)
06-12 13:38:33.371: ERROR/AndroidRuntime(13203):     at android.app.ActivityThread.main(ActivityThread.java:4627)
06-12 13:38:33.371: ERROR/AndroidRuntime(13203):     at java.lang.reflect.Method.invokeNative(Native Method)
06-12 13:38:33.371: ERROR/AndroidRuntime(13203):     at java.lang.reflect.Method.invoke(Method.java:521)
06-12 13:38:33.371: ERROR/AndroidRuntime(13203):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
06-12 13:38:33.371: ERROR/AndroidRuntime(13203):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
06-12 13:38:33.371: ERROR/AndroidRuntime(13203):     at dalvik.system.NativeStart.main(Native Method)

任何想法?

2 个答案:

答案 0 :(得分:2)

您不仅试图通过AdapterViewremoveView()移除某些东西 - 正如堆栈跟踪指示的那样,这是不允许的 - 但这不是View所在的位置你想要删除。

您通过以下方式添加了View

selectFile.addContentView(button, params);

我认为selectFileActivity个实例,因为那是最有可能回应addContentView()的人。

Activity不是ListViewselectFile不是selectFile.getListView()。您无法删除添加到selectFile的孩子,尝试将其从非selectFile的内容中删除。

而且,AFAICT,无论如何都无法移除您通过addContentView()添加的内容。

所以,请遵循@ MisterSquonk的推荐,并在布局的底部放置一个固定按钮。

此外,除非您特别需要getApplicationContext()对象,否则请勿致电Application。您不需要此处的Application对象。实际上,对于GUI工作,您几乎不需要Application对象。请将Activity传递给Button构造函数。

答案 1 :(得分:2)

正如其他人所指出的,有更好的方法可以满足您的特殊需求。但是,为了完整起见,有办法做你想做的事。

如果您使用以下内容向活动(selectFile)添加了一个视图(按钮):

selectFile.addContentView(button, params);

...你会这样删除它:

ViewGroup parent = (ViewGroup) button.getParent(); parent.removeView(button);