我有一个简单的列表 Activity ,显示某个目录中的所有文件。当我至少选中一个时,我希望在底部的列表上方显示一个按钮,我不希望它成为列表的一部分,因为这样你就必须一直滚动到底部才能看到按钮。我显示了按钮,这很棒,但我有一个问题。添加按钮后,我无法删除它。我希望在没有检查文件时将其删除。这是我的代码
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
是您要删除的内容。
您通过以下方式添加了View
:
selectFile.addContentView(button, params);
我认为 selectFile
是一个 Activity
实例,因为它是响应 addContentView()
的最有可能的候选者。
Activity
不是 ListView
。 selectFile
不是 selectFile.getListView()
。您无法通过尝试从非 selectFile
的内容中删除添加到 selectFile
的子项来删除该子项。
而且,据我所知,无论如何,您都无法删除通过 addContentView()
添加的内容。
所以,请遵循@MisterSquonk的建议,并在布局底部有一个固定按钮。
此外,请勿调用 getApplicationContext()
,除非您特别需要 Application
对象。此处不需要 Application
对象。事实上,对于 GUI 工作,您几乎不需要 Application
对象。请将 Activity
传递给 Button
构造函数。
关于java - 从列表 Activity 中删除 ContentView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6323842/