2016-10-18 8 views
1

私はリサイクラービューを使用してサーバーからの価格見積りを表示しています。リサイクラーアダプターでは、対応する行をクリックまたはタップして価格レコードのIDを取得しようとしています。 onCreateViewHolderの内部です。行を保持する相対レイアウトをタップすると、サーバーからすべての行が正しく取得されていますが、常に同じID(サーバーによって返された最初のID)が取得されます。これが起こる原因それはキャッシュですか?それを解決する方法。リサイクラービュー内の行レイアウトをクリックしたときと同じIDを取得する(Android)

これは私のコード

@Override 
public ListViewPriceListRowHolder onCreateViewHolder(final ViewGroup viewGroup, int position) { 
    View itemView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.text_fragment, viewGroup, false); 

    View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.price_list_row,null); 
    ListViewPriceListRowHolder holder = new ListViewPriceListRowHolder(v); 
    holder.rellayout.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      priceID = (TextView)viewGroup.findViewById(R.id.tv_price_row); 
      String priceIDStr = priceID.getText().toString(); 
      //here I am getting the same price id every time I click on diiferent row 
      Toast.makeText(mContext,priceIDStr,Toast.LENGTH_SHORT).show(); 
      } 
    }); 
    // return new ListViewRowHolder(itemView); 
    return holder; 
} 

マイViewHolder

package com.mdawaina.helper; 

import android.support.v7.widget.RecyclerView; 
import android.view.View; 
import android.widget.RelativeLayout; 
import android.widget.TextView; 

import com.android.volley.toolbox.NetworkImageView; 
import com.mdawaina.swftcc.R; 

public class ListViewPriceListRowHolder extends RecyclerView.ViewHolder { 

public NetworkImageView thumbnail ; 
public TextView priceID; 
public TextView orderID; 
public TextView SPName; 
public TextView catID; 
public TextView price; 
public TextView orderDetailsSuply; 
public TextView approve; 
public RelativeLayout rellayout; 

public ListViewPriceListRowHolder(View view){ 
    super(view); 

    this.priceID = (TextView) view.findViewById(R.id.tv_price_id_row); 
    this.orderID = (TextView) view.findViewById(R.id.tv_order_id_row); 
    this.SPName = (TextView) view.findViewById(R.id.tv_sp_name_row); 
    this.catID = (TextView)view.findViewById(R.id.tv_cat_id_row); 
    this.price = (TextView)view.findViewById(R.id.tv_price_row); 
    this.orderID = (TextView)view.findViewById(R.id.tv_order_id_row); 
    this.orderDetailsSuply =   (TextView)view.findViewById(R.id.tv_orderdetailsuplly_row); 
    this.approve = (TextView)view.findViewById(R.id.tv_approve_row); 
    this.rellayout = (RelativeLayout) view.findViewById(R.id.pl_rellayout); 

    view.setClickable(true); 
} 
} 

私の行レイアウト

私は彼らが得るとしてのみビューの所有者の異なる種類ごとに一度呼び出されると信じていOnCreateViewHolder
<?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:padding="20dp" 
android:id="@+id/pl_rellayout" 
android:background="#FFF" 
> 
<com.android.volley.toolbox.NetworkImageView 
    android:layout_width="80dp" 
    android:layout_height="80dp" 
    android:id="@+id/networkImage" 
    android:scaleType="fitXY" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="The Title Goes Here" 
    android:textColor="@color/blue" 


    android:textSize="18dp" 
    android:maxLines="2" 
    android:id="@+id/tv_sp_name_row" 
    android:paddingEnd="5dp" 
    android:paddingRight="5dp" 
    android:textColorHighlight="@color/colorPrimary" 
    android:shadowColor="@color/colorPrimaryDark" 
    android:shadowDx="3.4" 
    android:shadowDy="2.5" 
    android:layout_marginLeft="130dp" 
    android:layout_alignParentTop="true" 
    android:layout_alignRight="@+id/tv_price_row" 
    android:layout_alignEnd="@+id/tv_price_row" /> 

    <TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="14500000" 
    android:id="@+id/tv_price_row" 

    android:layout_alignBottom="@+id/networkImage" 

    android:layout_alignRight="@id/location_icon_row" 
    android:layout_alignEnd="@id/location_icon_row" 
    android:layout_marginRight="35dp" 
    android:layout_marginBottom="10dp" 
    /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="التفاصيل" 
    android:id="@+id/tv_orderdetailsuplly_row" 
    android:maxLines="10" 

    android:layout_below="@+id/tv_price_row" 
    android:layout_marginTop="5dp" 
    android:layout_alignParentRight="true" 
    android:layout_marginRight="35dp" 
    android:layout_marginLeft="10dp" 
    /> 

<Button 
    style="?android:attr/buttonStyleSmall" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="قبول العرض" 
    android:id="@+id/btnAcceptOffer" 

    android:background="@color/lightBlue" 
    android:textColor="@color/white" 
    android:layout_below="@+id/tv_orderdetailsuplly_row" 
    android:layout_marginTop="10dp" 
    android:layout_alignParentRight="true" 
    android:layout_marginRight="35dp" 
    android:layout_marginLeft="10dp" 

    android:shadowRadius="@integer/google_play_services_version" 

/> 


<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="URL" 
    android:id="@+id/tv_cat_id_row" 
    android:maxLines="0" 
    android:layout_alignBottom="@+id/networkImage" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:layout_marginLeft="35dp" 
    android:layout_marginStart="35dp" /> 


<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="URL" 
    android:id="@+id/tv_order_id_row" 
    android:maxLines="0" 
    android:layout_alignBottom="@+id/networkImage" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:layout_marginLeft="35dp" 
    android:layout_marginStart="35dp" /> 


<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="URL" 
    android:id="@+id/tv_price_id_row" 
    android:maxLines="0" 
    android:layout_alignBottom="@+id/networkImage" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:layout_marginLeft="35dp" 
    android:layout_marginStart="35dp" /> 


<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="URL" 
    android:id="@+id/tv_approve_row" 
    android:maxLines="0" 
    android:layout_alignBottom="@+id/networkImage" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:layout_marginLeft="35dp" 
    android:layout_marginStart="35dp" /> 

<ImageView 
    android:layout_width="30dp" 
    android:layout_height="30dp" 
    android:id="@+id/location_icon_row" 
    android:src="@drawable/ic_price_tag" 
    android:layout_alignBottom="@+id/networkImage" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentEnd="true" 
    /> 


<ImageView 
    android:layout_width="30dp" 
    android:layout_height="30dp" 
    android:id="@+id/details_icon_row" 
    android:src="@drawable/ic_order_long_text" 
    android:layout_below="@+id/location_icon_row" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentEnd="true" 
    /> 



</RelativeLayout> 
+0

onBindViewHolderの実装を()にも投稿してください。 onBindViewHolder()でクリックリスナーを設定する必要があります。 –

+0

はい、私は今onBindViewHolder()に設定して、私のために働いています:)おかげでSagar Trehan – mdawaina

答えて

0

ですリストに追加されました。クリックリスナーをonBindViewHolderメソッドに移動し、渡されたポジションとホルダーを使用して、リスト内の適切なアイテムを取得することができます。このような

何か作業をする必要があります:

@Override 
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
    (ListViewPriceListRowHolder) holder.itemView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      String id = holder.priceId.getText().toString() 
      // do stuff with the id 
     } 
    }); 
} 
+0

それは私のために働いた:)。お返事ありがとうございますLe2e410 – mdawaina

+0

@mdawaina:上記の答えがあなたの問題を解決するのに役立つ場合。それから、上の回答は上記の答えを受け入れる –

0

はこれを試してみてください:

@Override 
public ListViewPriceListRowHolder onCreateViewHolder(final ViewGroup viewGroup, int position) { 
    View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.price_list_row,null); 
    return v; 
} 



public class MyViewHolder extends RecyclerView.ViewHolder { 

    public NetworkImageView thumbnail ; 
    public TextView priceID; 
    public TextView orderID; 
    public TextView SPName; 
    public TextView catID; 
    public TextView price; 

    public TextView orderDetailsSuply; 
    public TextView approve; 
    public RelativeLayout rellayout; 


    public MyViewHolder(final View view) { 
     super(view); 
     priceID = (TextView) view.findViewById(R.id.tv_price_id_row); 
     orderID = (TextView) view.findViewById(R.id.tv_order_id_row); 
     SPName = (TextView) view.findViewById(R.id.tv_sp_name_row); 
     catID = (TextView)view.findViewById(R.id.tv_cat_id_row); 
     price = (TextView)view.findViewById(R.id.tv_price_row); 
     orderID = (TextView)view.findViewById(R.id.tv_order_id_row); 
     orderDetailsSuply=(TextView)view.findViewById(R.id.tv_orderdetailsuplly_row); 
     approve = (TextView)view.findViewById(R.id.tv_approve_row); 
     rellayout = (RelativeLayout) view.findViewById(R.id.pl_rellayout); 
     rellayout.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       priceID = (TextView)viewGroup.findViewById(R.id.tv_price_row); 
       String priceIDStr = priceID.getText().toString(); 
       //here I am getting the same price id every time I click on diiferent row 
       Toast.makeText(mContext,priceIDStr,Toast.LENGTH_SHORT).show(); 
       } 
     }); 
    } 
} 
+0

'viewGroup'は' MyViewHolder'のコンストラクタ内で定義されていません –