简体   繁体   中英

How to add CardView in RecyclerView Dynamically in Android???

I am working on a application where I have to add cardView to recyclerView dynamically , but it is not working.

This is my code :-

Button okBTN;
     EditText enterCornerNumberET;
     private RecyclerView mRecyclerView;
     private CornerListAdapter mAdapter;
 public int cornervalue;


protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.corner_list);


  okBTN = (Button)findViewById(R.id.okBTN);

        enterCornerNumberET = (EditText)findViewById(R.id.enterCornerNumberET);

 mRecyclerView = (RecyclerView)findViewById(R.id.recycler_view);


 mRecyclerView.setHasFixedSize(true);
        mLayoutManager = new LinearLayoutManager(this);
        mLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        mRecyclerView.setLayoutManager(mLayoutManager);


 okBTN.setOnClickListener(this);


  @Override
    public void onClick(View v) {

        switch (v.getId()){

 case R.id.okBTN:

                cornervalue = Integer.valueOf(enterCornerNumberET.getText().toString().trim());

                Toast.makeText(CornerListActivity.this, ""+cornervalue, Toast.LENGTH_SHORT).show();

                createCornerList(cornervalue);

               /*if(enterCornerNumberET.getText().toString().trim()==null){


                    Toast.makeText(CornerListActivity.this, "Please enter corner number", Toast.LENGTH_SHORT).show();

                }else{

                    createCornerList(cornervalue);

                }*/


                break;

}
}

 private void createCornerList(int cornervalue) {


        for (int i = 0; i < cornervalue; i++) {

            mAdapter=new CornerListAdapter(this,roofCornerArrayList);
            mRecyclerView.setAdapter(mAdapter);
        }
    }

Please have a look and let me know what mistake I am doing here. Thanks in advance. :)

Here in my code I have set CardView in RecyclerView and For Layout in RecyclerView, I have use StaggeredGridLayoutManager.

dataModel.java (Model Class)

private String first;

public String getFirst() {
    return first;
}
 public void setFirst(String first) {
    this.first = first;
}
  public dataModel()
  {}

MainActivity.java

public class MainActivity extends AppCompatActivity {

RecyclerView recyclerView;
List<dataModel> list;
AdapterViewHolder adapterViewHolder;
dataModel[] dataModels;
String[] first = {"QUICK CAULIFLOWER TABBOULESH",
        "GRILLED CORN WITH MISO BUTTER"};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main_activity);
    recyclerView = (RecyclerView) findViewById(R.id.recylcerView);
    int length=first.length;
    dataModels = new dataModel[length];
    list = new ArrayList<>();
    for (int i = 0; i < length; i++) {
        dataModels[i] = new dataModel();
        dataModels[i].setFirst(first[i]);
        dataModels[i].setDescription(second[i]);
        dataModels[i].setImage(image[i]);
        list.add(dataModels[i]);
    }
    adapterViewHolder = new AdapterViewHolder(list, MainActivity.this);
    recyclerView.setLayoutManager(new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL));
    recyclerView.setAdapter(adapterViewHolder);
}
}

AdapterViewHolder.java

public class AdapterViewHolder extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

private List<dataModel> list;
private Context context;

public AdapterViewHolder(List<dataModel> list, Context context) {
    this.list = list;
    this.context = context;
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout, parent, false); //inflate layout in view
    return new ViewHolder(view);  //return holder
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    ((ViewHolder) holder).textViewFirst.setText(list.get(position).getFirst());
}

@Override
public int getItemCount() {
    return list.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
    TextView textViewFirst;

    public ViewHolder(View itemView) {
        super(itemView);
        textViewFirst=(TextView)itemView.findViewById(R.id.textViewFirst);
    }
}
}

Here In my code, I have set array of String variable in CardView and after CardView is set in RecyclerView. For set CardView in RecyclerView I have use one AdapterViewHolder. AdapterViewHolder Class extends RecyclerView.Adapter and layout.xml contains cardView with one textView in it. In AdapterViewHolder,In onCreateViewHolder(), I have inflate layout.xml file and in onBindViewHolder() method bind values of dataModel class in textView. At last, In MainActivity.java I have set AdapterViewHolder in RecyclerView.

You can check here for how to use RecyclerView. After any change in data, you can call Adapter's notifyDataSetChanged() to refresh the view.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM