0

我試圖實現一個包含CardView的RecyclingView,其中包含一個GridView。沒有任何錯誤沒有顯示。當我嘗試運行應用程序時,只是一個白色的屏幕。使用CardView和GridView實現RecyclerView

public class MainActivity extends AppCompatActivity { 
    TextView mWeatherTemp, mWeatherDescript; 
    RecyclerView.Adapter adapter; 
    Context context; 
    GridView gridView; 
    String[] mTime = { 
      "1:00", 
      "2:00", 
      "3:00", 
      "4:00", 
      "5:00", 
      "6:00", 
      "7:00", 
      "8:00", 
      "9:00", 
      "10:00", 
      "11:00", 

    }; 

    String[] mDegreeTemp = { 
      "8°", 
      "12°", 
      "43°", 
      "100°", 
      "32°", 
      "12°", 
      "58°", 
      "39°", 
      "29°", 
      "86°", 
      "70°", 

    }; 

    int[] imageId = { 
      R.mipmap.ic_launcher 
    }; 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     context = getApplicationContext(); 
     Toolbar mToolbar = (Toolbar) findViewById(R.id.mMainToolbar); 
     setSupportActionBar(mToolbar); 
     mToolbar.setBackgroundColor(ContextCompat.getColor(this, R.color.weather_cool)); 

     mWeatherTemp = (TextView) findViewById(R.id.tvWeatherTemp); 
     mWeatherDescript = (TextView) findViewById(R.id.tvWeatherText); 

     Typeface robotDisplay3 = Typeface.createFromAsset(getApplicationContext().getAssets(), 
       "font/Roboto-Regular.ttf"); 
     mWeatherTemp.setTypeface(robotDisplay3); 

     RecyclerView recyclerView = (RecyclerView) findViewById(R.id.mHourlyRV); 
     HourlyGridAdapter adapter = new HourlyGridAdapter(getApplicationContext(), mTime, mDegreeTemp, imageId); 
     gridView = (GridView) findViewById(R.id.hourlyGridView); 
     gridView.setAdapter(adapter); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.settings, menu); 
     return super.onCreateOptionsMenu(menu); 
    } 
} 


public class HourlyGridAdapter extends BaseAdapter { 
    private Context mContext; 
    private String[] mTime; 
    private String[] mDegreeTemp; 
    private final int[] imageId; 

    public HourlyGridAdapter(Context context, String[] mTime, String[] mDegreeTemp, int[] imageId) { 
     mContext = context; 
     this.imageId = imageId; 
     this.mDegreeTemp = mDegreeTemp; 
     this.mTime = mTime; 
    } 

    @Override 
    public int getCount() { 
     return 0; 
    } 

    @Override 
    public Object getItem(int position) { 
     return null; 
    } 

    @Override 
    public long getItemId(int position) { 
     return 0; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder; 
     LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     if (convertView == null) { 
      convertView = inflater.inflate(R.layout.hourly_single, null, false); 
      holder = new ViewHolder(); 
      holder.timeText = (TextView) convertView.findViewById(R.id.timePlaceHolder); 
      holder.degreeText = (TextView) convertView.findViewById(R.id.degreePlaceHolder); 
      holder.weatherImage = (ImageView) convertView.findViewById(R.id.weatherIconHolder); 

      holder.timeText.setText(mTime[position]); 
      holder.degreeText.setText(mDegreeTemp[position]); 
      holder.weatherImage.setImageResource(imageId[position]); 

     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 

     return convertView; 
    } 

    static class ViewHolder { 
     TextView timeText, degreeText; 
     ImageView weatherImage; 
    } 
} 

佈局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto" 
     android:id="@+id/card_view" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_margin="5dp" 
     card_view:cardCornerRadius="6dp"> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical"> 

      <TextView 
       android:id="@+id/tvDate" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="TODAY" /> 

      <View 
       android:layout_width="match_parent" 
       android:layout_height="1dp" 
       android:background="@color/forecast_card_divider" /> 

      <GridView 
       android:id="@+id/hourlyGridView" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_marginTop="16dp" 
       android:horizontalSpacing="12dp" 
       android:numColumns="4" 
       android:verticalSpacing="12dp" /> 

     </LinearLayout> 
    </android.support.v7.widget.CardView> 
</LinearLayout> 

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="vertical"> 

    <TextView 
     android:id="@+id/timePlaceHolder" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/timePlaceHolderText" 
     android:layout_gravity="center"/> 

    <ImageView 
     android:id="@+id/weatherIconHolder" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@mipmap/ic_launcher" 
     android:layout_gravity="center"/> 

    <TextView 
     android:id="@+id/degreePlaceHolder" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="12°" 
     android:layout_gravity="center"/> 

</LinearLayout> 

林甚至不知道,如果讓所有回收的視圖內CardView裏面一個GridView是可能的。任何試圖創造這一點的幫助都會被創造性地掌握。

PS。我知道我沒有調用recyclerView這宣稱爲不起作用,並崩潰的應用程序和GridView爲空。不太確定這裏要做什麼。不知道是否需要爲recyclerview創建適配器,因爲所有textView和ImageView都在網格中而不是cardview中。

+0

您的回收站視圖沒有佈局管理器或適配器。您需要同時擁有這兩者才能在回收站視圖中顯示任何內容。 – cyroxis

回答

0

您正在初始化並設置gridview的適配器,該適配器位於recyclerview的每個項目中,而不是回收站適配器中,但是處於活動狀態。考慮刪除所有與gridview相關的代碼到recyclerview的適配器。