Android - 运行时未查看的View,Checkbox,TextView

时间:2017-06-29 17:57:46

标签: android android-layout checkbox refresh

我是Android新手,我在复选框和文本视图方面遇到问题,但在运行时没有刷新。 TextView必须将颜色从浅灰色更改为浅灰色,而Checkbox必须将其自定义的drawable从红色更改为绿色。我已经尝试了分离并附加碎片但它关闭了,也许我不知道在哪里放置分离并附着在片段中。我尝试过invalidate()和requestLayout(),它也关闭了。我尝试在onCreateView()中使用它们,也许我不应该把它们放在那里。我的片段没有活动。这是我需要改变的图像。它在预览窗口中的内容是绿色自定义复选框drawables,但在运行时它们是红色自定义drawables,这是我们之前将它们更改为绿色,而TextViews在预览窗口中是浅灰色但是它们更暗在运行时灰色,这是他们以前的。

Green checkbox custom drawable Red custom custom drawable

public class CheckListFragment extends Fragment{
   private RelativeLayout fragment_checklist;
   private Fragment fragment = new CheckListFragment();
   private Checkbox chkStart, chkDownload;

   @Override
   public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
   final View rootView = inflater.inflate(R.layout.fragment_checklist, container, false);
   fragment_checklist = (RelativeLayout) rootView.findViewById(R.id.fragment_checklist_gather);

    chkStart = (CheckBox) rootView.findViewById(R.id.chkStarted);
    chkDownload = (CheckBox) rootView.findViewById(R.id.chkDownloaded);

    //tried to explicitly make it green but doesn't work.
    chkStart.setButtonDrawable(R.drawable.custom_green_checkbox);
    chkDownload.setButtonDrawable(R.drawable.custom_green_checkbox);

    fragment.getView().invalidate(); // tried these
    fragment.getView().requestLayout();// tried these

    //tried this. Maybe in the wrong spot.
    FragmentTransaction ft = getFragmentManager.beginTransaction();
    ft.detach(fragment);
    ft.attach(fragment);
    ft.commit();

    return rootView;
   }
}
<RelativeLayout xmlns:ads="http://schemas.android.com/apk/res-auto" xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent">
           <CheckBox
            android:id="@+id/chkStarted"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/start"
            android:layout_below="@+id/chkInProgess"
            android:gravity="top"
            android:padding="4dp"
            android:checked="true"
            android:enabled="false"
            android:layout_marginTop="10dp"
            android:button="@xml/custom_checkbox_green"/>

        <CheckBox
            android:id="@+id/chkDownloaded"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:layout_below="@+id/chkStarted"
            android:text="@string/download"
            android:gravity="top"
            android:padding="4dp"
            android:checked="true"
            android:enabled="false"
            android:button="@xml/custom_checkbox_green"/>
   </RelativeLayout>

textviews不会在运行时更改颜色,我尝试刷新布局,但它们在运行时不会刷新。它们是预览窗口中需要的东西,但它们并不是它们在运行时应该存在的东西。任何帮助将非常感激。提前谢谢!

1 个答案:

答案 0 :(得分:0)

我明白了。我读过其他一些stackoverflow页面,他们将textview设置为不可见,然后可见。这对我不起作用,但我发现将复选框设置为未选中,然后再次检查将其固定在onCreateView中。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    final View rootView = inflater.inflate(R.layout.fragment_checklist, container, false);

    chkStart = (CheckBox) rootView.findViewById(R.id.chkStarted);
    chkDownload = (CheckBox) rootView.findViewById(R.id.chkDownloaded);

    chkStart.setChecked(false);
    chkStart.setChecked(true);
    chkDownload.setChecked(false);
    chkDownload.setChecked(true);

    return rootView;
}

问题是复选框已经被检查过,这意味着它们是红色的,并且它显示为绿色,必须取消选中,然后再次检查。另外,我有其他代码使它显示为绿色。所以,这是我的解决方案。