2017-08-28 13 views
2

Ich versuche, ein 2x6 (WxH) GridLayout in meiner Kotlin Android-Anwendung zu bekommen. Ich habe meine XML und Fragment/Adapter für eine RecyclerView eingerichtet, aber bin ein wenig ratlos für, wie ein GridLayout auf diese anwenden.GridLayout in Kotlin?

Wie kann ich meine Elemente (listview_row_enrollments.xml) in einem Raster anstelle einer horizontalen Liste anzeigen lassen?

EnrollmentFragment.kt

class EnrollmentsFragment : Fragment() { 

    // TODO: Rename and change types of parameters 
    private var mParam1: String? = null 
    private var mParam2: String? = null 

    private var mListener: OnFragmentInteractionListener? = null 

    override fun onCreate(savedInstanceState: Bundle?) { 
     super.onCreate(savedInstanceState) 
     if (arguments != null) { 
      mParam1 = arguments.getString(ARG_PARAM1) 
      mParam2 = arguments.getString(ARG_PARAM2) 
     } 
    } 

    override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, 
           savedInstanceState: Bundle?): View? { 
     // Inflate the layout for this fragment 
     var view = inflater!!.inflate(R.layout.fragment_enrollments, container, false) 
     loadView(view) 
     return view 
    } 

    fun loadView(view: View) { 
     var recyclerView: RecyclerView = view.findViewById<RecyclerView>(R.id.recyclerView) as RecyclerView 
     recyclerView.layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false) 
     recyclerView.setHasFixedSize(true) 
     recyclerView.adapter = EnrollmentsAdapter() 
    } 

// override fun onAttach(context: Context?) { 
//  super.onAttach(context) 
//  if (context is OnFragmentInteractionListener) { 
//   mListener = context 
//  } else { 
//   throw RuntimeException(context!!.toString() + " must implement OnFragmentInteractionListener") 
//  } 
// } 

    override fun onDetach() { 
     super.onDetach() 
     mListener = null 
    } 

    interface OnFragmentInteractionListener { 
     // TODO: Update argument type and name 
     fun onFragmentInteraction(uri: Uri) 
    } 

    companion object { 

     private val ARG_PARAM1 = "param1" 
     private val ARG_PARAM2 = "param2" 

     fun newInstance(): EnrollmentsFragment { 
      val fragment = EnrollmentsFragment() 
      val args = Bundle() 
      fragment.arguments = args 
      return fragment 
     } 
    } 
}// Required empty public constructor 

EnrollmentsAdapter.kt:

class EnrollmentsAdapter : RecyclerView.Adapter<EnrollmentsAdapter.EnrollmentsViewHolder>() { 
    private val items: List<String> 

    init { 
     this.items = Arrays.asList("Breaches", "Data Leaks", "Hacker Chatter", "Services Monitored", "xxx", "xxx") 
    } 

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): EnrollmentsViewHolder { 
     val view = LayoutInflater.from(parent.context).inflate(R.layout.listview_row_enrollments, parent, false) 

//  view.titleTextView.typeface = Typeface.createFromAsset(view.context.assets, "fonts/Montserrat-Regular.ttf") 
//  view.countTextView.typeface = Typeface.createFromAsset(view.context.assets, "fonts/Montserrat-Regular.ttf") 
//  view.subtextTextView.typeface = Typeface.createFromAsset(view.context.assets, "fonts/Montserrat-Regular.ttf") 
//  view.updatedTextView.typeface = Typeface.createFromAsset(view.context.assets, "fonts/Montserrat-Light.ttf") 

     return EnrollmentsViewHolder(view) 
    } 

    override fun onBindViewHolder(holder: EnrollmentsViewHolder, position: Int) { 
     holder.bind(getItem(position)) 
    } 

    override fun getItemCount(): Int { 
     return 6 
    } 

    fun getItem(position: Int): String { 
     return items[position] 
    } 

    class EnrollmentsViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { 

     fun bind(value: String) { 
//   itemView.titleTextView.text = value 
     } 

    } 

} 

FragmentEnrollments.xml:

<RelativeLayout 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="xxx.xxx.EnrollmentsFragment"> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/recyclerView" 
     android:background="@color/kLightGray" 
     android:paddingTop="8dp" 
     android:clipToPadding="false" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

</RelativeLayout> 

listview_row_enrollments.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:padding="5dp" 
    android:layout_width="150dp" 
    android:layout_height="150dp"> 

    <TextView 
     android:id="@+id/info_text" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:gravity="center" 
     android:background="@color/colorAccent"/> 

</LinearLayout> 

Was wie jetzt meiner Meinung nach aussieht: enter image description here

Antwort

3

stattdessen eine GridLayoutManager verwenden.

ersetzen:

recyclerView.layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false) 

mit:

recyclerView.layoutManager = GridLayoutManager(context, 2)