我有一个简单的列表活动,显示某个目录的所有文件。当我至少有一个选中时,我想要一个按钮显示在底部的列表中,我不希望它成为列表的一部分,因为那时你必须一直滚动到底部才能看到按钮。我有按钮出现,这很好,但我有一个问题。添加按钮后,我无法将其删除。我希望在没有检查文件时将其删除。这是我的代码
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)
任何想法?
答案 0 :(得分:2)
您不仅试图通过AdapterView
从removeView()
移除某些东西 - 正如堆栈跟踪指示的那样,这是不允许的 - 但这不是View
所在的位置你想要删除。
您通过以下方式添加了View
:
selectFile.addContentView(button, params);
我认为selectFile
是Activity
个实例,因为那是最有可能回应addContentView()
的人。
Activity
不是ListView
。 selectFile
不是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);