2015-12-10 24 views
0

我在oncreateViewHolder(自定義適配器)中使用佈局和充氣cardview佈局中的其他佈局元素和recyclerview。只有當我在不與其他佈局元素的佈局中使用recyclerview時,纔會調用方法。Recycler的自定義適配器方法不叫

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent">   
<android.support.v4.widget.SwipeRefreshLayout 
android:id="@+id/swipe_layout_for_item_detail" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content"> 

<android.support.v7.widget.CardView 
android:id="@+id/detail_card_view" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:layout_margin="5dp"> 

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

<TextView 
android:id="@+id/detail_category_description" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="left" 
android:textStyle="bold" 
android:layout_below="@+id/detail_category_price" /> 

<TextView 
android:id="@+id/detail_category_price" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_alignParentEnd="true" 
android:layout_alignParentRight="true" 
android:layout_gravity="center" 
android:layout_margin="10dp" 
android:text="Rs: 1000" /> 

<Button 
android:id="@+id/btn_bid" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:text="Bid" 
android:textColor="@color/colorPrimary" 
android:layout_alignParentEnd="true" 
android:layout_alignParentRight="true" 
android:layout_below="@+id/detail_category_price" 
android:layout_margin="10dp"/> 
<GridView 
android:id="@+id/grid_view" 
android:layout_below="@+id/btn_bid" 
android:columnWidth="100dp" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content"> 
</GridView> 
<View 
android:layout_width="fill_parent" 
android:layout_height="1dip" 
android:id="@+id/view" 
android:layout_marginTop="5dp" 
android:layout_below="@+id/grid_view" 
android:background="#000000" /> 
<TextView 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_marginTop="2dp" 
android:text="About the seller" 
android:layout_margin="5dp" 
android:textSize="20sp" 
android:textColor="@color/orange" 
android:id="@+id/about_seller" 
android:layout_below="@+id/view" 
/> 

<TextView 
android:id="@+id/seller_user_name" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:text="username: bilal" 
android:layout_margin="5dp" 
android:layout_below="@+id/about_seller"/> 
<Button 
android:id="@+id/contact_seller_button" 
android:text="contact button" 
android:layout_margin="5dp" 
android:layout_below="@+id/seller_user_name" 
android:textColor="@color/colorPrimary" 
android:shadowColor="@color/orange" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content"/> 
</RelativeLayout> 
</android.support.v7.widget.CardView> 
<android.support.v7.widget.RecyclerView 
android:id="@+id/bids_recycler_view" 
android:layout_width="match_parent" 
android:layout_below="@+id/detail_card_view" 
android:layout_height="200dp" 
android:scrollbars="vertical"> 
</android.support.v7.widget.RecyclerView> 
</android.support.v4.widget.SwipeRefreshLayout> 
</RelativeLayout> 

這裏是我膨脹

<android.support.v7.widget.CardView 
android:layout_margin="5dp" 
android:id="@+id/card_view" 
android:layout_gravity="center" 
android:background="@android:color/white" 
app:cardElevation="2sp" 
app:cardUseCompatPadding="true" 
android:layout_width="match_parent" 
android:layout_height="200dp"> 
<RelativeLayout 
android:layout_width="match_parent" 
android:layout_height="wrap_content"> 

<TextView 
android:id="@+id/bid_text_View" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:text="$10000" 
android:textStyle="bold" 
android:textSize="20sp" 
android:textColor="@android:color/black" 
android:layout_alignParentTop="true" 
android:layout_alignParentRight="true" 
android:layout_alignParentEnd="true" /> 

<TextView 
android:id="@+id/bidder_user_name" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:text="bidder Name" 
android:textStyle="italic" 
android:textSize="16sp" 
android:textColor="@android:color/black" 
android:layout_below="@+id/bid_text_View" 
android:layout_alignParentLeft="true" 
android:layout_alignParentStart="true" /> 
</RelativeLayout> 
</android.support.v7.widget.CardView> 
</ScrollView> 

這裏的佈局活動代碼 - >

private RecyclerView mRecyclerView; 
private SwipeRefreshLayout mSwipeRefreshLayout; 
private BidsAdapter mBidsAdapter; 
private ArrayList<String> arrayList; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.item_detials); 
    String detail = getIntent().getStringExtra(AppGlobals.detial); 
    setTitle(detail); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    mRecyclerView = (RecyclerView)findViewById(R.id.bids_recycler_view); 
    mRecyclerView.setHasFixedSize(true); 
    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); 
    mSwipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_layout_for_item_detail); 
    mSwipeRefreshLayout.setColorSchemeResources(R.color.orange, R.color.green, 
      R.color.colorPrimary, R.color.gray); 
    mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 
     @Override 
     public void onRefresh() { 
      mSwipeRefreshLayout.setRefreshing(false); 
     } 
    }); 
    mRecyclerView.setLayoutManager(linearLayoutManager); 
    mRecyclerView.canScrollVertically(LinearLayoutManager.VERTICAL); 
    bitmapArrayList = new ArrayList<>(); 
    arrayList = new ArrayList<>(); 
    arrayList.add("test one"); 
    arrayList.add("test two"); 
    arrayList.add("test three"); 
    arrayList.add("test four"); 
    arrayList.add("test five"); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    mBidsAdapter = new BidsAdapter(arrayList); 
    mRecyclerView.setAdapter(mBidsAdapter); 
    System.out.println(mRecyclerView == null); 
    System.out.println(mBidsAdapter == null); 
    mRecyclerView.addOnItemTouchListener(new BidsAdapter(arrayList, getApplicationContext() 
      , new BidsAdapter.OnItemClickListener() { 
     @Override 
     public void onItem(String item) { 
      System.out.println(item); 
     } 
    })); 
    System.out.println("DONE"); 

} 
static class BidsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements 
     RecyclerView.OnItemTouchListener { 

    private OnItemClickListener mListener; 
    private GestureDetector mGestureDetector; 
    private BidView bidView; 
    private ArrayList<String> items; 

    public interface OnItemClickListener { 
     void onItem(String item); 
    } 

    public BidsAdapter(ArrayList<String> data) { 
     super(); 
     this.items = data; 
    } 

    public BidsAdapter(ArrayList<String> categories, Context context, OnItemClickListener listener) { 
     this.items = categories; 
     mListener = listener; 
     mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { 
      @Override 
      public boolean onSingleTapUp(MotionEvent e) { 
       return true; 
      } 
     }); 
    } 

    @Override 
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     System.out.println("beforeView"); 
     View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.bids_layout, parent, false); 
     System.out.println(view == null); 
     bidView = new BidView(view); 
     System.out.println("WORKING"); 
     return bidView; 
    } 

    @Override 
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
     bidView.textView.setText(String.valueOf(position)); 
     bidView.bidderTextView.setText(items.get(position)); 
     System.out.println(position); 
    } 

    @Override 
    public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) { 
     View childView = rv.findChildViewUnder(e.getX(), e.getY()); 
     if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) { 
      mListener.onItem(items.get(rv.getChildPosition(childView))); 
      return true; 
     } 
     return false; 
    } 

    @Override 
    public void onTouchEvent(RecyclerView rv, MotionEvent e) { 

    } 

    @Override 
    public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { 

    } 

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

static class BidView extends RecyclerView.ViewHolder { 
    public TextView textView; 
    public TextView bidderTextView; 

    public BidView(View itemView) { 
     super(itemView); 
     textView = (TextView) itemView.findViewById(R.id.bid_text_View); 
     bidderTextView = (TextView) itemView.findViewById(R.id.bidder_user_name); 
    } 
} 

回答

0

您更換此

static class BidsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements 
    RecyclerView.OnItemTouchListener { 

代替

static class BidsAdapter extends RecyclerView.Adapter<BidsAdapter.BidView> implements 
    RecyclerView.OnItemTouchListener { 
+0

還是一樣。 –

+0

你把你的BidView類放在哪裏?在適配器或其他主要類? – Saif