0

2 つのアクティビティがあり、それぞれが同じアダプターにバインドされています。項目をクリックすると、すべてのデータを含む 2 番目のアクティビティが開きます。カードビューの幅は wrap_content で、最初のアクティビティでは問題なく動作しますが、2 番目のアクティビティでは幅をmatch_parentどこにしたいですかレイアウトを水平にしてみsetLayoutParams() ましたがうまくいきませんでした

public AzkaarViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    CardView cardView=(CardView)parent.findViewById(R.id.cardview);

    CardView.LayoutParams layoutParams = (CardView.LayoutParams)cardView.getLayoutParams();
    layoutParams.height = CardView.LayoutParams.MATCH_PARENT;
    cardView.setLayoutParams(layoutParams);
    ...

そして、私はこのエラーがあります

java.lang.NullPointerException
at com.nourabosily.aa.azkaar.AzkaarAdapter.onCreateViewHolder(AzkaarAdapter.java:37)
at com.nourabosily.aa.azkaar.AzkaarAdapter.onCreateViewHolder(AzkaarAdapter.java:23)

これはアダプターのコードです

public class AzkaarAdapter extends RecyclerView.Adapter<AzkaarAdapter.AzkaarViewHolder>  {
    ArrayList<AzkarForm> azkarForms=new ArrayList<AzkarForm>();
    Context ctx;

public  AzkaarAdapter (ArrayList<AzkarForm> azkarForms,Context ctx){
    this.azkarForms=azkarForms;
    this.ctx=ctx;
}
@Override
public AzkaarViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        CardView cardView=(CardView)parent.findViewById(R.id.cardview);
    CardView.LayoutParams layoutParams = (CardView.LayoutParams)cardView.getLayoutParams();
    layoutParams.height = CardView.LayoutParams.MATCH_PARENT;
    cardView.setLayoutParams(layoutParams);
    View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview_layout,parent,false);
    AzkaarViewHolder azkaarViewHolder=new AzkaarViewHolder(view,ctx,azkarForms);
    ViewGroup viewGroup=(ViewGroup)parent.getParent();
    CardView.LayoutParams params=(CardView.LayoutParams)(viewGroup.getLayoutParams());
    params.height=800;
    return azkaarViewHolder;

}


@Override
public void onBindViewHolder(AzkaarViewHolder holder, int position) {


    AzkarForm azkarForm=azkarForms.get(position);
    if(ctx instanceof MainActivity) {
        holder.sample.setText(azkarForm.getSample());
        holder.number.setText(String.valueOf(azkarForm.getNumber()));
    }else{
        holder.sample.setText(azkarForm.getComplete_morning());
        holder.number.setText(String.valueOf(azkarForm.getNumber()));
    }
    int width =holder.itemView.getWidth();
    ViewGroup.LayoutParams params=holder.itemView.getLayoutParams();
    params.height= RelativeLayout.LayoutParams.MATCH_PARENT;
    holder.itemView.setLayoutParams(params);

}

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

public static class AzkaarViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{

    TextView sample, number;
    Context ctx;
    ArrayList<AzkarForm> azkarForms = new ArrayList<AzkarForm>();

    public AzkaarViewHolder(View itemView, Context ctx, ArrayList<AzkarForm> azkarForms) {
        super(itemView);
        this.ctx = ctx;
        if(this.ctx instanceof MainActivity)
            itemView.setOnClickListener(this);
        this.azkarForms = azkarForms;
        sample = (TextView) itemView.findViewById(R.id.sample);
        number = (TextView) itemView.findViewById(R.id.number);

    }


    @Override
    public void onClick(View v) {
        int position=getAdapterPosition();
        AzkarForm azkarForm=azkarForms.get(position);
        Intent intent=new Intent(this.ctx,DetailsActivity.class);
        intent.putExtra("numbers",azkarForm.getNumber());
        intent.putExtra("sample",azkarForm.getSample());
        intent.putExtra("complete",azkarForm.getComplete_morning());
        intent.putExtra("position",position);
        this.ctx.startActivity(intent);

    }
}

}

これはレイアウトのコードです

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/linearlayout">
<android.support.v7.widget.CardView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/cardview">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:id="@+id/relative">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/sample"
            android:text="Noura Ali Bosily"
            android:textSize="20dp"
            android:textStyle="bold"
            android:gravity="center"
            android:layout_alignParentTop="true"
            android:layout_marginTop="15dp"
            android:layout_marginLeft="20dp"
            android:layout_alignParentRight="true"
            />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/number"
            android:text="5"
            android:textSize="20dp"
            android:textStyle="bold"
            android:gravity="center"
            android:layout_marginTop="5dp"
            android:layout_marginLeft="20dp"
            android:layout_alignParentLeft="true"/>

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

4

2 に答える 2

0
CardView.LayoutParams layoutParams = (CardView.LayoutParams)cardView.getLayoutParams();
layoutParams.height = CardView.LayoutParams.MATCH_PARENT;
cardView.setLayoutParams(layoutParams);

代わりに、

LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 
holder.cardView.setLayoutParams(params);

でやる

@Override
public void onBindViewHolder(AzkaarViewHolder holder, int position) {

cardView は ViewHolder にある必要があります。

于 2016-12-23T05:04:03.313 に答える