我正在尝试在 kotlin 的片段中执行自动图像滑块。我正在尝试将活动转换为片段。但是 runouithread 不能在片段中工作。任何可能的解决方案?
我还尝试了其他几件事。但不是一个可能的解决方案,我可以在片段内进行图像滑动,但不能进行自动滑动....
我的主要活动()
package com.example.sliderimagemovie
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<fragment
android:layout_width="409dp"
android:layout_height="290dp"
android:name="com.example.sliderimagemovie.HomeFragment"
android:id="@+id/fragment"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginBottom="441dp"/>
</android.support.constraint.ConstraintLayout>
幻灯片项目.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="275dp">
<ImageView
android:layout_width="0dp"
android:layout_height="0dp" app:srcCompat="@drawable/ic_launcher_background"
android:id="@+id/slide_image"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent" android:scaleType="centerCrop"/>
<android.support.design.widget.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="true" app:srcCompat="@drawable/ic_play_button"
android:id="@+id/glide_play_button"
app:layout_constraintTop_toTopOf="@+id/slide_image" android:layout_marginBottom="8dp"
app:layout_constraintBottom_toBottomOf="@+id/slide_image"
app:layout_constraintEnd_toEndOf="@+id/slide_image"
app:layout_constraintStart_toStartOf="@+id/slide_image" android:layout_marginLeft="8dp"
android:layout_marginStart="8dp" app:backgroundTint="@color/colorAccent"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="100dp" app:srcCompat="@drawable/gradient_bg"
android:id="@+id/imageView3" app:layout_constraintBottom_toBottomOf="parent" android:layout_marginEnd="8dp"
app:layout_constraintEnd_toEndOf="parent" android:layout_marginRight="8dp"
app:layout_constraintStart_toStartOf="parent" android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"/>
<TextView
android:text="TextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/movie_title" android:layout_marginTop="8dp"
app:layout_constraintTop_toBottomOf="@+id/glide_play_button"
app:layout_constraintBottom_toBottomOf="@+id/imageView3" app:layout_constraintEnd_toEndOf="parent"
android:layout_marginEnd="24dp" android:layout_marginRight="24dp"
app:layout_constraintStart_toStartOf="parent" android:layout_marginLeft="24dp"
android:layout_marginStart="24dp" android:textSize="24sp" app:layout_constraintHorizontal_bias="0.0"
android:textColor="@android:color/holo_red_light"/>
</android.support.constraint.ConstraintLayout>
片段主页.xml
<?xml version="1.0" encoding="utf-8"?>
<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=".HomeFragment">
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<android.support.v4.view.ViewPager
android:layout_width="0dp"
android:layout_height="275dp" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent"
android:id="@+id/view_pager_glide"/>
<android.support.design.widget.TabLayout
app:tabBackground="@drawable/indicator_item"
app:tabGravity="center"
app:tabIndicatorHeight="0dp"
android:layout_width="395dp"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@+id/view_pager_glide" app:layout_constraintStart_toStartOf="parent"
android:layout_marginLeft="8dp" android:layout_marginStart="8dp" app:layout_constraintEnd_toEndOf="parent"
android:layout_marginEnd="8dp" android:layout_marginRight="8dp" android:id="@+id/indicator">
</android.support.design.widget.TabLayout>
</android.support.constraint.ConstraintLayout>
</FrameLayout>
幻灯片.kt
package com.example.sliderimagemovie.Model
class Slide(var image:Int, var title:String)
slidePagerAdapter.kt
package com.example.sliderimagemovie.Adapter
import android.content.Context
import android.support.v4.view.PagerAdapter
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import com.example.sliderimagemovie.Model.Slide
import com.example.sliderimagemovie.R
class SlidePagerAdapter:PagerAdapter {
var mContext: Context?=null
var mList:List<Slide>?=null
constructor(context: Context, list:List<Slide>)
{
mContext=context
mList=list
}
override fun instantiateItem(container: ViewGroup, position: Int): Any {
var inflater:LayoutInflater= mContext!!.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
var slideLayout:View =inflater.inflate(R.layout.slide_item,null)
var slideImage:ImageView =slideLayout.findViewById(R.id.slide_image)
var slideText:TextView=slideLayout.findViewById(R.id.movie_title)
slideImage.setImageResource(mList!!.get(position).image)
slideText.setText(mList!!.get(position).title)
container.addView(slideLayout)
//return super.instantiateItem(container, position)
return slideLayout
}
override fun isViewFromObject(p0: View, p1: Any): Boolean {
return p0 == p1
}
override fun getCount(): Int {
return mList!!.count()
}
override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) {
//super.destroyItem(container, position, `object`)
container.removeView(`object` as View)
}
}
HomeFragment.kt
package com.example.sliderimagemovie
import android.app.Application
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.support.v4.app.Fragment
import android.support.v4.view.ViewPager
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.example.sliderimagemovie.Adapter.SlidePagerAdapter
import com.example.sliderimagemovie.Model.Slide
import kotlinx.android.synthetic.main.fragment_home.*
import kotlin.concurrent.fixedRateTimer
class HomeFragment : Fragment() {
var lstSlides:MutableList<Slide> =ArrayList()
var sliderPage: ViewPager?=null
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
val view = inflater.inflate(R.layout.fragment_home, container, false)
sliderPage=view.findViewById(R.id.view_pager_glide)
lstSlides.add(Slide(R.drawable.spiderman,"Slide1 Spiderman"))
lstSlides.add(Slide(R.drawable.avenger,"Slide2 Avenger"))
lstSlides.add(Slide(R.drawable.frozen2,"Slide3 Frozen2"))
lstSlides.add(Slide(R.drawable.fastfurious,"Slide4 Fastfurious"))
lstSlides.add(Slide(R.drawable.joker,"Slide5 Joker"))
lstSlides.add(Slide(R.drawable.jumanji,"Slide6 Jumanji"))
lstSlides.add(Slide(R.drawable.terminator,"Slide7 Terminator"))
var adapter: SlidePagerAdapter = SlidePagerAdapter(context!!,this.lstSlides)
sliderPage!!.adapter=adapter
indicator.setupWithViewPager(sliderPage,true)
fixedRateTimer(name = "timer",initialDelay = 4000,period = 6000){
// I'm getting error over here. Since runOnUiThread wont work with fragment , I tried to run with //activity. but its not working. I tried couple of other things.
getactivity().runOnUiThread
{
public override fun run() {
if (sliderPage!!.currentItem < lstSlides.count() - 1) {
sliderPage!!.currentItem = sliderPage!!.currentItem + 1
} else {
sliderPage!!.currentItem = 0
}
}
})
}
return view
}
}