在android

时间:2018-07-30 06:15:10

标签: android android-fragments kotlin android-imageview android-scrollview

我是android studio和kotlin的业余爱好者。我正在实现一个仪表板,其中将框架布局作为正文布局,并且当单击bottomnavigationview上的每个项目时,将其替换为不同的片段。但是,对于一个特定的项目,我需要使用两种视图,即imageview和scrollview。因此,当滚动视图中的进度条不包含进度时,我必须显示Imageview隐藏滚动视图并同时禁用滚动。但是,如果滚动视图中的进度条中有一些进度,则应显示滚动视图及其内容,而不是图像视图。

我已经在相同的背景下看到了一些答案,但这对我没有用。那么,我想知道该怎么做?我做错了吗?

下面是代码段。

class ProgressFragment : Fragment() {

val TAG = "ProgressFragment"
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                          savedInstanceState: Bundle?): View? {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_progress, container, false)
}

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    progress_progressbar2?.setProgress(5)
    progress_progressbar2?.max=15

    if (progress_progressbar2?.progress!!.equals(0)){
        started_image?.bringToFront()
        progress_scrollview?.invalidate()
    }
    else{
        progress_scrollview?.bringToFront()
        started_image?.invalidate()
        navigation_header_container?.setImageResource(R.drawable.header_pink)
    }
  }
}

我在mainactivity中将此片段称为主片段,并在mainactivity中将该片段替换为帧布局。

下面给出了activity_main.xml的布局。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/bg"
tools:context=".MainActivity">
<ImageView
android:id="@+id/navigation_header_container"
android:layout_width="match_parent"
android:layout_height="65dp"
android:scaleY="1.5"
android:scaleX="2"
android:src="@drawable/header_green"
/>
<FrameLayout
    android:id="@+id/main_frame"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="75dp"
    android:layout_above="@id/bottom_nav"
    android:layout_alignParentStart="true"
    android:layout_below="@+id/navigation_header_container"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true">

</FrameLayout>

<android.support.design.widget.BottomNavigationView
    android:id="@+id/bottom_nav"
    android:layout_width="match_parent"
    android:layout_height="56dp"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    app:itemBackground="@color/colorWhite"
    app:itemTextColor="@color/nav_item_colors"
    app:menu="@menu/bottom_navigation">

</android.support.design.widget.BottomNavigationView>

<TextView
    android:id="@+id/header_text"
    android:layout_width="156dp"
    android:layout_height="39dp"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="12dp"
    android:gravity="center"
    android:textSize="20dp"
    android:textColor="#200"
    android:textStyle="bold"
    android:text="TextView" />
<!--app:itemIconTint="@color/nav_item_colors"-->
<!--app:itemTextColor="@color/nav_item_colors"-->


</RelativeLayout>

进度布局如下。

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ProgressFragment">

<!-- TODO: Update blank fragment layout -->

<ScrollView
    android:id="@+id/progress_scrollview"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RelativeLayout
        android:id="@+id/progress_parentrelayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <RelativeLayout
            android:id="@+id/progress_child1relayout"
            android:layout_width="190dp"
            android:layout_height="280dp">

            <TextView
                android:id="@+id/quadrant1_textview1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="60sp"
                android:layout_marginTop="90dp"
                android:gravity="center"
                android:text="Min"
                android:textColor="#200"
                android:textSize="18sp"
                android:textStyle="bold" />

            <ProgressBar
                android:id="@+id/progress_progressbar1"
                style="?android:attr/progressBarStyleHorizontal"
                android:layout_width="90dp"
                android:layout_height="wrap_content"
                android:layout_marginLeft="35dp"
                android:layout_marginTop="140dp"
                android:progressDrawable="@drawable/customprogressbar" />
        </RelativeLayout>

        <RelativeLayout
            android:id="@+id/progress_child2relayout"
            android:layout_width="190dp"
            android:layout_height="280dp"
            android:layout_below="@+id/progress_child1relayout">

            <TextView
                android:id="@+id/quadrant2_textview1"
                android:layout_width="90dp"
                android:layout_height="wrap_content"
                android:layout_marginLeft="40sp"
                android:layout_marginStart="40sp"
                android:layout_marginTop="70dp"
                android:text="Challenge Status"
                android:textColor="#200"
                android:textSize="18sp"
                android:textStyle="bold" />

            <ProgressBar
                android:id="@+id/progress_progressbar2"
                style="?android:attr/progressBarStyleHorizontal"
                android:layout_width="90dp"
                android:layout_height="wrap_content"
                android:layout_marginLeft="40dp"
                android:layout_marginStart="40dp"
                android:layout_marginTop="160dp"
                android:progressDrawable="@drawable/customprogressbar" />

            <TextView
                android:id="@+id/quadrant2_textview2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="42dp"
                android:layout_marginTop="130dp"
                android:text="Completed"
                android:textColor="#200"
                android:textSize="18sp"
                android:textStyle="bold" />

            <TextView
                android:id="@+id/quadrant2_textview3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="45dp"
                android:layout_marginTop="190dp"
                android:text="open"
                android:textColor="#200"
                android:textSize="18sp"
                android:textStyle="bold" />

            <TextView
                android:id="@+id/quadrant2_textview4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="45dp"
                android:layout_marginTop="230dp"
                android:text="0"
                android:textColor="#200"
                android:textSize="18sp"
                android:textStyle="bold" />
        </RelativeLayout>

        <RelativeLayout
            android:id="@+id/progress_child3relayout"
            android:layout_width="190dp"
            android:layout_height="280dp"
            android:layout_toRightOf="@+id/progress_child1relayout">

            <TextView
                android:id="@+id/quadrant3_textview1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="60sp"
                android:layout_marginTop="90dp"
                android:gravity="center"
                android:text="TextView"
                android:textColor="#200"
                android:textSize="18sp"
                android:textStyle="bold" />
        </RelativeLayout>

        <RelativeLayout
            android:id="@+id/progress_child4relayout"
            android:layout_width="190dp"
            android:layout_height="280dp"
            android:layout_below="@id/progress_child3relayout"
            android:layout_toRightOf="@+id/progress_child2relayout">

            <TextView
                android:id="@+id/quadrant4_textview1"
                android:layout_width="100dp"
                android:layout_height="wrap_content"
                android:layout_marginLeft="60sp"
                android:layout_marginTop="70dp"
                android:text="Pods Mastered"
                android:textColor="#200"
                android:textSize="18sp"
                android:textStyle="bold" />

            <me.zhanghai.android.materialprogressbar.MaterialProgressBar
                android:id="@+id/circularprogress"
                android:layout_width="150dp"
                android:layout_height="70dp"
                android:layout_marginLeft="15dp"
                android:layout_marginTop="130dp"
                android:progress="20" />
            <!--<ProgressBar-->
            <!--android:id="@+id/progress_progressbar3"-->
            <!--android:layout_width="wrap_content"-->
            <!--android:layout_height="wrap_content"-->
            <!--android:layout_marginTop="120dp"-->
            <!--android:layout_marginLeft="50sp"-->
            <!--android:indeterminateDrawable="@drawable/ringprogressbar"-->
            <!--android:max="100"-->
            <!--android:progress="20"-->
            <!--style="?android:attr/progressBarStyleLarge" />-->

        </RelativeLayout>

        <TextView
            android:id="@+id/whatdoesthis_mean"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="580dp"
            android:clickable="true"
            android:gravity="center"
            android:text="What does this mean?"
            android:textColor="#200"
            android:textSize="15dp"
            android:textStyle="bold" />

        <ImageView
            android:id="@+id/child_button"
            android:layout_width="344dp"
            android:layout_height="79dp"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="620dp"
            android:src="@drawable/pinkcolor"
            android:text="child name" />

        <TextView
            android:id="@+id/child_name_text"
            android:layout_width="184dp"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:layout_marginBottom="11dp"
            android:fontFamily="sans-serif"
            android:gravity="center"
            android:text="Child Name"
            android:textColor="#190fdf"
            android:textSize="30sp"
            android:textStyle="bold" />

    </RelativeLayout>

</ScrollView>
<ImageView
    android:id="@+id/started_image"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:src="@drawable/letsgetstarted"
    android:background="#ebcac3c7"
    />

</FrameLayout>

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

与活动不同,片段不会在OnCreate中创建视图。整个片段的生命周期都可以理解。而且,这是活动生命周期和片段生命周期之间的主要区别之一。因此,与其在OnCreate中分配值,不如在OnViewCreated中完成。

该代码段可以修改为:

class ProgressFragment : Fragment() {

val TAG = "ProgressFragment"
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                          savedInstanceState: Bundle?): View? {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_progress, container, false)
}

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    progress_progressbar2?.setProgress(12)
    progress_progressbar2?.max=15
    val currentProgress = progress_progressbar2?.progress ?: 0
    if (currentProgress == 0){
        started_image?.visibility = View.VISIBLE
        progress_scrollview?.visibility = View.GONE
    } else {
        started_image?.visibility = View.GONE
        progress_scrollview?.visibility = View.VISIBLE
        navigation_header_container?.setImageResource(R.drawable.header_pink)
    }
  }
}

条件和静态/动态进度分配也可以通过OnResume方法完成。

谢谢毗湿奴。

答案 1 :(得分:-1)

val currentProgress = progress_progressbar2?.progress ?: 0
if (currentProgress == 0){
    started_image?.visibility = VISIBLE
    progress_scrollview?.visibilty = GONE
} else {
    started_image?.visibility = GONE
    progress_scrollview?.visibilty = VISIBLE
    navigation_header_container?.setImageResource(R.drawable.header_pink)
}

您可以使用视图的bringToFront来代替visibility来管理它。

Android文档:https://developer.android.com/reference/android/view/View.html#setVisibility(int)

尝试一下