2016-05-16 31 views
1

所以我只是做了这个简单的片段,其中包含一个RecycleView。回收视图具有用两个TextView和一个CheckBox定制的相对布局。问题是单个列表项占用了整个AVD seceen的空间,我为列表项设置的监听器不工作。RecycleView布局管理器列表项正在整个屏幕

here is a screenshot of the AVD screen (I am using android studio)

And when scrolled

的XML布局代码

<?xml version="1.0" encoding="utf-8"?> 
<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"> 
<CheckBox 
    android:id="@+id/list_item_crime_solved_check_box" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true" 
    android:padding="4dp" 
    /> 
    <TextView 
     android:id="@+id/list_item_crime_title_text_view" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_toLeftOf="@id/list_item_crime_solved_check_box" 
     android:textStyle="bold" 
     android:padding="4dp" 
     tools:text="Crime Title"/> 
    <TextView 
     android:id="@+id/list_item_crime_date_text_view" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_toLeftOf="@id/list_item_crime_solved_check_box" 
     android:layout_below="@id/list_item_crime_title_text_view" 
     android:padding="4dp" 
     tools:text="Crime date" 
     /> 
</RelativeLayout> 

片段Java代码:

package com.bignerdranch.android.criminalintent; 

import android.content.Intent; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.CheckBox; 
import android.widget.TextView; 
import android.widget.Toast; 

import java.util.List; 

public class CrimeListFragment extends Fragment 
{ 
    private RecyclerView mCrimeRecyclerView; 
    private CrimeAdabter mCrimeAdabter; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     View v = inflater.inflate(R.layout.fragment_crime_list, container, false); 
     mCrimeRecyclerView = (RecyclerView) v.findViewById(R.id.crime_recycler_view); 
     mCrimeRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 
     updateUI(); 
     return v; 
    } 

    private void updateUI() 
    { 
     CrimeLab crimeLab = CrimeLab.get(getActivity()); 
     List<Crime> crimes = crimeLab.getCrimes(); 
     mCrimeAdabter = new CrimeAdabter(crimes); 
     mCrimeRecyclerView.setAdapter(mCrimeAdabter); 
    } 


} 

的ViewHolder Java代码:

private class CrimeHolder extends RecyclerView.ViewHolder implements View.OnClickListener 
{ 
    private TextView mTitleTextView; 
    private TextView mDateTextView; 
    private CheckBox mCrimeSolvedCheckBox; 
    private Crime mCrime; 

    public CrimeHolder(View itemView) 
    { 
     super(itemView); 
     mTitleTextView = (TextView) itemView.findViewById(R.id.list_item_crime_title_text_view); 
     mDateTextView = (TextView) itemView.findViewById(R.id.list_item_crime_date_text_view); 
     mCrimeSolvedCheckBox = (CheckBox) itemView.findViewById(R.id.list_item_crime_solved_check_box); 
    } 

    public void bindCrime(Crime crime) 
    { 
     mCrime = crime; 
     mTitleTextView.setText(mCrime.getTitle()); 
     mDateTextView.setText(mCrime.getDate().toString()); 
     mCrimeSolvedCheckBox.setChecked(mCrime.isSolved()); 
    } 

    @Override 
    public void onClick(View v) 
    { 
     Intent i=new Intent(getActivity(),CrimeActivity.class); 
     startActivity(i); 
    } 
} 

和适配器java代码:

private class CrimeAdabter extends RecyclerView.Adapter<CrimeHolder> 
{ 
    private List<Crime> mCrimes; 

    public CrimeAdabter(List<Crime> crimes) 
    { 
     mCrimes = crimes; 
    } 

    @Override 
    public CrimeHolder onCreateViewHolder(ViewGroup parent, int viewType) 
    { 
     LayoutInflater inflater = LayoutInflater.from(getActivity()); 
     View v = inflater.inflate(R.layout.list_item_crime, parent, false); 

     return new CrimeHolder(v); 
    } 

    @Override 
    public void onBindViewHolder(CrimeHolder holder, int position) 
    { 
     Crime crime = mCrimes.get(position); 
     holder.bindCrime(crime); 

    } 


    @Override 
    public int getItemCount() 
    { 
     return mCrimes.size(); 
    } 
} 
+0

更改相对高度wrap_content – Pavya

+0

更改您的relativeLayout高度android:layout_height =“match_parent”to wrap_content –

回答

8

这是因为你的根的RelativeLayout的高度设置为match_parent。使其成为wrap_content或特定的高度。

+0

谢谢,它的工作。但是你知道听众为什么不工作吗? –

+0

@omerabbas因为你不把它设置为视图:) – Seishin

+0

感谢队友我觉得自己像一个总白痴忘记那:( –