Android CheckedTextView如何更新视图

Android CheckedTextView如何更新视图,android,checkedtextview,Android,Checkedtextview,我已通过编程方式将CheckedTextView添加到linearlayout视图中。请看以下代码: private LinearLayout linearLayout; private CheckedTextView checkedtextview; linearLayout = (LinearLayout) findViewById(R.id.statusView); checkedtextview = new CheckedTextView(ScanStatus.this,

我已通过编程方式将CheckedTextView添加到linearlayout视图中。请看以下代码:

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):致命异常:主 E/AndroidRuntime(24818):进程:com.example.ashwini.timapp,PID:24818 E/AndroidRuntime(24818):java.lang.IllegalStateException:指定的子级已具有父级。必须首先对子级的父级调用removeView()


请建议我如何更新视图?

我想您首先需要删除视图,然后更新它

linearLayout.removeView(checkedtextview);
checkedtextview.setCheckMarkDrawable(getDrawable(R.mipmap.check1));
checkedtextview.setChecked(true); 
checkedtextview.setTextColor(Color.GREEN); 
linearLayout.addView(checkedtextview);

似乎您正在尝试添加两次
checkedtextview

要更改选中状态,可以从下面的
linearLayout
中获取视图

linearLayout.getChildAt(位置)

在类中保留一个对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
    }
或者,如果您不想从父thn中删除所有子thn,您可以尝试以下操作:

 if (checkedtextview.getParent() != null)
        ((ViewGroup)checkedtextview.getParent()).removeView(checkedtextview);
    linearLayout.addView(checkedtextview);

我是android新手,你能用代码解释一下吗?不行。这将从此布局中删除所有视图。而且null检查也不正确,如果父项为null,则无法添加视图,将出现NPE.if(checkedtextview.getParent()!=null)((视图组)checkedtextview.getParent()).removeView(checkedtextview);linearLayout.addView(checkedtextview);如果第一种变体不起作用,请告诉我。也许你还需要调用“checkedtextview.invalidate()”我是android的初学者。如何引用checkedtextview?你能用代码片段解释一下吗?我看你已经有了。它是类中的私有变量。一旦您在开始时创建了它,您就有了一个引用,而不必每次都重新创建它来更新。您可以在运行时在类中的任何位置更改此视图的属性,并且可能应该调用
invalidate()
方法在屏幕上重新绘制它