Android CheckedTextView如何更新视图
Android CheckedTextView how to update the view
我已经以编程方式将 CheckedTextView 添加到线性布局视图中。请看下面的代码:
private LinearLayout linearLayout;
private CheckedTextView checkedtextview;
linearLayout = (LinearLayout) findViewById(R.id.statusView);
checkedtextview = new CheckedTextView(ScanStatus.this, null, android.R.attr.listChoiceIndicatorMultiple);
checkedtextview.setText(R.string.applications);
linearLayout.addView(checkedtextview);
稍后在代码中我必须像下面这样更新 checkedtextview:
checkedtextview.setCheckMarkDrawable(getDrawable(R.mipmap.check1));
checkedtextview.setChecked(true);
checkedtextview.setTextColor(Color.GREEN);
linearLayout.addView(checkedtextview);
但这会导致崩溃并显示以下日志:
D/AndroidRuntime(24818):正在关闭虚拟机
E/AndroidRuntime(24818):致命异常:main
E/AndroidRuntime(24818):进程:com.example.ashwini.timapp,PID:24818
E/AndroidRuntime(24818): java.lang.IllegalStateException: 指定的 child 已经有一个 parent。您必须先在 child 的 parent 上调用 removeView()。
请建议我如何更新视图?
我认为您首先需要删除视图,然后再更新它。
linearLayout.removeView(checkedtextview);
checkedtextview.setCheckMarkDrawable(getDrawable(R.mipmap.check1));
checkedtextview.setChecked(true);
checkedtextview.setTextColor(Color.GREEN);
linearLayout.addView(checkedtextview);
您似乎在尝试将 checkedtextview
添加两次。
要更改选中状态,您可以从 linearLayout
获取视图,如下所示
或者linearLayout.getChildAt(position)
要么
在您的 class 中保留对 checkedtextview
的引用,并随时更改状态。
你有两个选择。首先,如果您一直引用您的 checkedtextview - 您可以更新它而无需调用 addView:
checkedtextview.setCheckMarkDrawable(getDrawable(R.mipmap.check1));
checkedtextview.setChecked(true);
checkedtextview.setTextColor(Color.GREEN);.
第二种情况使用@坚持远方回答的提示:
linearLayout.removeView(checkedtextview);
checkedtextview.setCheckMarkDrawable(getDrawable(R.mipmap.check1));
checkedtextview.setChecked(true);
checkedtextview.setTextColor(Color.GREEN);
linearLayout.addView(checkedtextview);
你可以检查
if (checkedtextview.getParent() == null) {
// thn add your childview
} else {
linearLayout.removeAllViews();
//add your child view herer
}
或者如果您不想从父项中删除所有子项,那么您可以试试这个:
if (checkedtextview.getParent() != null)
((ViewGroup)checkedtextview.getParent()).removeView(checkedtextview);
linearLayout.addView(checkedtextview);
我已经以编程方式将 CheckedTextView 添加到线性布局视图中。请看下面的代码:
private LinearLayout linearLayout;
private CheckedTextView checkedtextview;
linearLayout = (LinearLayout) findViewById(R.id.statusView);
checkedtextview = new CheckedTextView(ScanStatus.this, null, android.R.attr.listChoiceIndicatorMultiple);
checkedtextview.setText(R.string.applications);
linearLayout.addView(checkedtextview);
稍后在代码中我必须像下面这样更新 checkedtextview:
checkedtextview.setCheckMarkDrawable(getDrawable(R.mipmap.check1));
checkedtextview.setChecked(true);
checkedtextview.setTextColor(Color.GREEN);
linearLayout.addView(checkedtextview);
但这会导致崩溃并显示以下日志:
D/AndroidRuntime(24818):正在关闭虚拟机 E/AndroidRuntime(24818):致命异常:main E/AndroidRuntime(24818):进程:com.example.ashwini.timapp,PID:24818 E/AndroidRuntime(24818): java.lang.IllegalStateException: 指定的 child 已经有一个 parent。您必须先在 child 的 parent 上调用 removeView()。
请建议我如何更新视图?
我认为您首先需要删除视图,然后再更新它。
linearLayout.removeView(checkedtextview);
checkedtextview.setCheckMarkDrawable(getDrawable(R.mipmap.check1));
checkedtextview.setChecked(true);
checkedtextview.setTextColor(Color.GREEN);
linearLayout.addView(checkedtextview);
您似乎在尝试将 checkedtextview
添加两次。
要更改选中状态,您可以从 linearLayout
获取视图,如下所示
或者linearLayout.getChildAt(position)
要么
在您的 class 中保留对 checkedtextview
的引用,并随时更改状态。
你有两个选择。首先,如果您一直引用您的 checkedtextview - 您可以更新它而无需调用 addView:
checkedtextview.setCheckMarkDrawable(getDrawable(R.mipmap.check1));
checkedtextview.setChecked(true);
checkedtextview.setTextColor(Color.GREEN);.
第二种情况使用@坚持远方回答的提示:
linearLayout.removeView(checkedtextview);
checkedtextview.setCheckMarkDrawable(getDrawable(R.mipmap.check1));
checkedtextview.setChecked(true);
checkedtextview.setTextColor(Color.GREEN);
linearLayout.addView(checkedtextview);
你可以检查
if (checkedtextview.getParent() == null) {
// thn add your childview
} else {
linearLayout.removeAllViews();
//add your child view herer
}
或者如果您不想从父项中删除所有子项,那么您可以试试这个:
if (checkedtextview.getParent() != null)
((ViewGroup)checkedtextview.getParent()).removeView(checkedtextview);
linearLayout.addView(checkedtextview);