2016-07-03 33 views
0

我使用Androidhive爲cardView和RecyclerView的教程,但cardview的XML並沒有顯示自己...我CardView XML不顯示自身

我activity_main和content_main是可見的,但我cardview是看不見的..

我該如何解決它?

這是我cardview XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:card_view="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 
<android.support.v7.widget.CardView 
    android:id="@+id/card_view" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_gravity="center" 
    android:layout_margin="@dimen/card_margin" 
    android:elevation="3dp" 
    card_view:cardCornerRadius="0dp"> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <ImageView 
      android:id="@+id/thumbnail" 
      android:layout_width="match_parent" 
      android:layout_height="160dp" 
      android:background="?attr/selectableItemBackgroundBorderless" 
      android:clickable="true" 
      android:scaleType="fitXY" /> 

     <TextView 
      android:id="@+id/title" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@id/thumbnail" 
      android:paddingLeft="10dp" 
      android:paddingRight="10dp" 
      android:paddingTop="10dp" 
      android:textColor="@color/cardview_dark_background" 
      android:textSize="15dp" /> 

     <TextView 
      android:id="@+id/count" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@id/title" 
      android:paddingBottom="5dp" 
      android:paddingLeft="10dp" 
      android:paddingRight="10dp" 
      android:textSize="12dp" /> 

     <ImageView 
      android:id="@+id/overflow" 
      android:layout_width="20dp" 
      android:layout_height="30dp" 
      android:layout_alignParentRight="true" 
      android:layout_below="@id/thumbnail" 
      android:layout_marginTop="10dp" 
      android:scaleType="centerCrop" 
      android:src="@mipmap/bandar_homa" /> 
    </RelativeLayout> 

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

</LinearLayout> 

這是我content_main:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout 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="match_parent" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    tools:context="ir.homa.HomaActivity" 
    tools:showIn="@layout/app_bar_homa"> 

    <android.support.design.widget.AppBarLayout 
     android:id="@+id/appbar" 
     android:layout_width="match_parent" 
     android:layout_height="@dimen/detail_backdrop_height" 
     android:fitsSystemWindows="true" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

     <android.support.design.widget.CollapsingToolbarLayout 
      android:id="@+id/collapsing_toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:fitsSystemWindows="true" 
      app:contentScrim="?attr/colorPrimary" 
      app:expandedTitleTextAppearance="@android:color/transparent" 
      app:layout_scrollFlags="scroll|exitUntilCollapsed"> 

      <RelativeLayout 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content"> 

       <ImageView 
        android:id="@+id/backdrop" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:fitsSystemWindows="true" 
        android:scaleType="centerCrop" 
        app:layout_collapseMode="parallax" 
        android:layout_alignParentTop="true" /> 

       <LinearLayout 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_centerInParent="true" 
        android:gravity="center_horizontal" 
        android:orientation="vertical"> 

        <TextView 
         android:id="@+id/love_music" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:text="@string/backdrop_title" 
         android:textColor="@android:color/white" 
         android:textSize="@dimen/backdrop_title" /> 

        <TextView 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:text="@string/backdrop_subtitle" 
         android:textColor="@android:color/white" 
         android:textSize="@dimen/backdrop_subtitle" /> 

       </LinearLayout> 
      </RelativeLayout> 

      <android.support.v7.widget.Toolbar 
       android:id="@+id/toolbar" 
       android:layout_width="match_parent" 
       android:layout_height="?attr/actionBarSize" 
       app:layout_collapseMode="pin" 
       app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> 

     </android.support.design.widget.CollapsingToolbarLayout> 

    </android.support.design.widget.AppBarLayout> 


    <RelativeLayout 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="match_parent" 
     android:background="@color/viewBg" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" 
     tools:context="ir.homa.HomaActivity" 
     tools:showIn="@layout/activity_homa"> 

     <android.support.v7.widget.RecyclerView 
      android:id="@+id/recycler_view" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:clipToPadding="false" 
      android:scrollbars="vertical" /> 

    </RelativeLayout> 
</android.support.design.widget.CoordinatorLayout> 

這是我activity_main:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.DrawerLayout 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:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    tools:openDrawer="start"> 

    <include 
     layout="@layout/app_bar_homa" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

    <android.support.design.widget.NavigationView 
     android:id="@+id/nav_view" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:fitsSystemWindows="true" 
     app:headerLayout="@layout/nav_header_homa" 
     app:menu="@menu/activity_homa_drawer" /> 


</android.support.v4.widget.DrawerLayout> 

UPDATE:

MainActivity:

package ir.homa; 

import android.content.Intent; 
import android.content.res.Resources; 
import android.graphics.Rect; 
import android.os.Bundle; 
import android.support.design.widget.AppBarLayout; 
import android.support.design.widget.CollapsingToolbarLayout; 
import android.support.design.widget.NavigationView; 
import android.support.v4.view.GravityCompat; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.ActionBarDrawerToggle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.RecyclerView; 
import android.support.v7.widget.Toolbar; 
import android.util.TypedValue; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 

import java.util.List; 

public class HomaActivity extends AppCompatActivity 
     implements NavigationView.OnNavigationItemSelectedListener { 

    private RecyclerView recyclerView; 
    private HotelListAdapter adapter; 
    private List<HotelList> hotelList; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_homa); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
      initCollapsingToolbar(); 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
       this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
     drawer.setDrawerListener(toggle); 
     toggle.syncState(); 

     NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
     navigationView.setNavigationItemSelectedListener(this); 




    } 

    private void initCollapsingToolbar() { 
     final CollapsingToolbarLayout collapsingToolbar = 
       (CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar); 
     collapsingToolbar.setTitle(" "); 
     AppBarLayout appBarLayout = (AppBarLayout) findViewById(R.id.appbar); 
     appBarLayout.setExpanded(true); 

     // hiding & showing the title when toolbar expanded & collapsed 
     appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() { 
      boolean isShow = false; 
      int scrollRange = -1; 
      @Override 
      public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) { 
       if (scrollRange == -1) { 
        scrollRange = appBarLayout.getTotalScrollRange(); 
       } 
       if (scrollRange + verticalOffset == 0) { 
        collapsingToolbar.setTitle(getString(R.string.shoar)); 
        isShow = true; 
       } else if (isShow) { 
        collapsingToolbar.setTitle(" "); 
        isShow = false; 
       } 
      } 
     }); 
    } 
      private void prepareHotels() { 
       int[] covers = new int[]{ 
         R.mipmap.bandar_homa, 
         R.mipmap.mashhad_homa, 
         R.mipmap.shiraz_homa, 
       }; 
       HotelList a = new HotelList("هتل هما - بندر عباس", 13, covers[0]); 
       hotelList.add(a); 

       a = new HotelList("هتل هما - مشهد", 8, covers[1]); 
       hotelList.add(a); 

       a = new HotelList("هتل هما - شیراز", 11, covers[2]); 
       hotelList.add(a); 
       adapter.notifyDataSetChanged(); 
      } 
      /** 
      * RecyclerView item decoration - give equal margin around grid item 
      */ 
      public class GridSpacingItemDecoration extends RecyclerView.ItemDecoration { 

       private int spanCount; 
       private int spacing; 
       private boolean includeEdge; 

       public GridSpacingItemDecoration(int spanCount, int spacing, boolean includeEdge) { 
        this.spanCount = spanCount; 
        this.spacing = spacing; 
        this.includeEdge = includeEdge; 
       } 
       @Override 
       public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { 
        int position = parent.getChildAdapterPosition(view); // item position 
        int column = position % spanCount; // item column 

        if (includeEdge) { 
         outRect.left = spacing - column * spacing/spanCount; // spacing - column * ((1f/spanCount) * spacing) 
         outRect.right = (column + 1) * spacing/spanCount; // (column + 1) * ((1f/spanCount) * spacing) 

         if (position < spanCount) { // top edge 
          outRect.top = spacing; 
         } 
         outRect.bottom = spacing; // item bottom 
        } else { 
         outRect.left = column * spacing/spanCount; // column * ((1f/spanCount) * spacing) 
         outRect.right = spacing - (column + 1) * spacing/spanCount; // spacing - (column + 1) * ((1f/ spanCount) * spacing) 
         if (position >= spanCount) { 
          outRect.top = spacing; // item top 
         } 
        } 
       } 
      } 
    /** 
    * Converting dp to pixel 
    */ 
    private int dpToPx(int dp) { 
     Resources r = getResources(); 
     return Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, r.getDisplayMetrics())); 

    } 
    @Override 
    public void onBackPressed() { 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     if (drawer.isDrawerOpen(GravityCompat.START)) { 
      drawer.closeDrawer(GravityCompat.START); 
     } else { 
      super.onBackPressed(); 
     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.homa, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    @SuppressWarnings("StatementWithEmptyBody") 
    @Override 
    public boolean onNavigationItemSelected(MenuItem item) { 
     // Handle navigation view item clicks here. 
     int id = item.getItemId(); 

     if (id == R.id.nav_camera) { 

      Intent intent = new Intent(HomaActivity.this, LoginActivity.class); 
      startActivity(intent); 
      finish(); 
     } else if (id == R.id.nav_gallery) { 
      Intent intent = new Intent(HomaActivity.this, RegisterActivity.class); 
      startActivity(intent); 
      finish(); 
     } else if (id == R.id.nav_slideshow) { 

     } else if (id == R.id.nav_manage) { 

     } else if (id == R.id.nav_share) { 

     } else if (id == R.id.nav_send) { 

     } 

     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     drawer.closeDrawer(GravityCompat.START); 
     return true; 
    } 

} 

HotelListAdapter:

package ir.homa; 

import android.content.Context; 
import android.support.v7.widget.PopupMenu; 
import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.bumptech.glide.Glide; 

import java.util.List; 
/** 
* Created by SMQ on 7/3/2016. 
*/ 
public class HotelListAdapter extends RecyclerView.Adapter<HotelListAdapter.MyViewHolder> { 

    private Context mContext; 
    private List<HotelList> hotelList; 

    public class MyViewHolder extends RecyclerView.ViewHolder { 
     public TextView title, count; 
     public ImageView thumbnail, overflow; 

     public MyViewHolder(View view) { 
      super(view); 
      title = (TextView) view.findViewById(R.id.title); 
      count = (TextView) view.findViewById(R.id.count); 
      thumbnail = (ImageView) view.findViewById(R.id.thumbnail); 
      overflow = (ImageView) view.findViewById(R.id.overflow); 
     } 
    } 


    public HotelListAdapter(Context mContext, List<HotelList> hotelList) { 
     this.mContext = mContext; 
     this.hotelList = hotelList; 
    } 

    @Override 
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View itemView = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.hotel_list, parent, false); 

     return new MyViewHolder(itemView); 
    } 

    @Override 
    public void onBindViewHolder(final MyViewHolder holder, int position) { 
     HotelList hotel = hotelList.get(position); 
     holder.title.setText(hotel.getName()); 
     holder.count.setText(hotel.getNumOfRooms() + " اتاق"); 

     // loading hotel cover using Glide library 
     Glide.with(mContext).load(hotel.getThumbnail()).into(holder.thumbnail); 

     holder.overflow.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       showPopupMenu(holder.overflow); 
      } 
     }); 
    } 

    /** 
    * Showing popup menu when tapping on 3 dots 
    */ 
    private void showPopupMenu(View view) { 
     // inflate menu 
     PopupMenu popup = new PopupMenu(mContext, view); 
     MenuInflater inflater = popup.getMenuInflater(); 
     inflater.inflate(R.menu.hotel_list_menu, popup.getMenu()); 
     popup.setOnMenuItemClickListener(new MyMenuItemClickListener()); 
     popup.show(); 
    } 


    class MyMenuItemClickListener implements PopupMenu.OnMenuItemClickListener { 

     public MyMenuItemClickListener() { 
     } 

     @Override 
     public boolean onMenuItemClick(MenuItem menuItem) { 
      switch (menuItem.getItemId()) { 
       case R.id.action_add_favourite: 
        Toast.makeText(mContext, "افزودن به علاقه مندی ها", Toast.LENGTH_SHORT).show(); 
        return true; 
       case R.id.action_hotel_next: 
        Toast.makeText(mContext, "هتل بعدی", Toast.LENGTH_SHORT).show(); 
        return true; 
       default: 
      } 
      return false; 
     } 

    } 

    @Override 
    public int getItemCount() { 
     return hotelList.size(); 
    } 
} 

HotelList:

package ir.homa; 

    /** 
    * Created by SMQ on 7/3/2016. 
    */ 

public class HotelList { 
    private String name; 
    private int numOfRooms; 
    private int thumbnail; 

    public HotelList() { 
    } 

    public HotelList(String name, int numOfRooms, int thumbnail) { 
     this.name = name; 
     this.numOfRooms = numOfRooms; 
     this.thumbnail = thumbnail; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public int getNumOfRooms() { 
     return numOfRooms; 
    } 

    public void setNumOfRooms(int numOfRooms) { 
     this.numOfRooms = numOfRooms; 
    } 

    public int getThumbnail() { 
     return thumbnail; 
    } 

    public void setThumbnail(int thumbnail) { 
     this.thumbnail = thumbnail; 
    } 
    } 

我設置工具:上下文這一點,但它並沒有工作...

+0

請出示您的Java代碼,以及如何膨脹(顯示)cardview佈局。 – amitairos

+0

您是否創建了適配器?請附上你的代碼。 – motis10

+0

我附上所有..請再次查看! <3 – Mohammadreza

回答

1

它永遠不會顯示bcz你忘了在mainActivity中添加一些行。

,就把這行中的onCreate:

prepareHotels(); 
    adapter= new HotelListAdapter(getApplicationContext, hotelList); 
    recycleview.setAdapter(adapter); 
+0

謝謝你!它的工作!!! ... – Mohammadreza

+0

是的...它應該是工作,BCF你的整個代碼是好的..你只是缺少一些線 –