从列表活动中删除ContentView

问题描述

| 我有一个简单的清单活动,该清单活动显示了某个目录下的所有文件。当我至少选中一个时,我希望按钮显示底部的列表上方,我不希望它成为列表的一部分,因为那样一来,您必须一直滚动到底部才能看到按钮。我有显示的按钮,这很好,但是我有问题。添加按钮后,无法将其删除。我希望在未检查任何文件时将其删除。这是我的代码
    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)
有任何想法吗?     

解决方法

        您不仅试图通过
removeView()
AdapterView
中删除某些内容(如堆栈跟踪所示,不允许这样做),而且不是您要删除
View
的地方。 您通过以下方式添加了“ 4”:
selectFile.addContentView(button,params);
我假设
selectFile
Activity
实例,因为这是对
addContentView()
做出反应的最有可能的候选者。
Activity
不是
ListView
selectFile
不是
selectFile.getListView()
。您无法通过尝试从非
selectFile
的东西中删除添加到
selectFile
的孩子。 而且,AFAICT仍然无法删除通过
addContentView()
添加的内容。 因此,请遵循@MisterSquonk的建议,并在布局底部仅显示一个固定按钮。 另外,除非特别需要
Application
对象,否则请勿调用
getApplicationContext()
。您在这里不需要
Application
对象。实际上,对于GUI工作,您几乎不需要
Application
对象。请只将
Activity
传递给
Button
构造函数。     ,        正如其他人指出的那样,有更好的方法来满足您的特定需求。但是,为了完整起见,有一种方法可以做您想要的。 如果使用以下方法将视图(按钮)添加到活动(selectFile):
selectFile.addContentView(button,params);
...您可以这样删除它:
ViewGroup parent = (ViewGroup) button.getParent();
parent.removeView(button);