2017-08-28 21 views
2

私はKotlin Androidアプリケーションで2x6(WxH)GridLayoutを取得しようとしています。私は自分のxmlとフラグメント/アダプタをRecyclerView用に設定していますが、これにGridLayoutを適用する方法については少し犠牲にしています。KotlinのGridLayout?

アイテム(listview_row_enrollments.xml)を水平リストではなくグリッドに表示するにはどうすればよいですか?

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> 

私の見解は、今どのように見えるか: enter image description here

答えて

3

代わりGridLayoutManagerを使用してください。

置き換えます

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

をして:

recyclerView.layoutManager = GridLayoutManager(context, 2)