Адаптер RecycleView и основной код не работают из-за неизвестной ошибки, вы можете заметить разницу? - PullRequest
0 голосов
/ 06 мая 2020

всем привет, я новичок в студии android и работаю над своим школьным проектом. Мне нужно использовать палочку RecycleV ie. Я пытался сделать это, но безуспешно. Я использую класс Object под названием Task, который имеет 3 свойства, которые должны отображаться на макете, но я не знаю, в чем моя ошибка. строки, обозначенные как проблемы, выделены жирным шрифтом. Буду рад, если кто-нибудь мне поможет!

мой класс объекта:

public class Task {
private String material;
private String day;
private String month;

public Task (String material,String day,String month)
{
    this.material = material;
    this.day = day;
    this.month = month;
}

public String getMaterial() {
    return material;
}

public void setMaterial(String material) {
    this.material = material;
}

public String getDay() {
    return day;
}

public void setDay(String day) {
    this.day = day;
}

public String getMonth() {
    return month;
}

public void setMonth(String month) {
    this.month = month;
}

}

Код адаптера:

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

private Context mCtx;
private List<Task> tList;

// data is passed into the constructor
public HomeRecyclerViewAdapter(Context mCtx, List<Task> tList) {
    this.mCtx = mCtx;
    this.tList = tList;
}

// stores and recycles views as they are scrolled off screen
public class ViewHolder extends RecyclerView.ViewHolder {
    TextView tvText, tvDateDay, tvDateMonth;
        public ViewHolder(View itemView) {
            super(itemView);
            tvText = itemView.findViewById(R.id.tvText);
            tvDateDay = itemView.findViewById(R.id.tvDateDay);
            tvDateMonth = itemView.findViewById(R.id.tvDateMonth);
        }
}


// inflates the row layout from xml when needed
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    //inflating and returning our view holder
    LayoutInflater inflater = LayoutInflater.from(mCtx);
    View view = inflater.inflate(R.layout.home_recyclerview_row, null);
    return new ViewHolder(view);
}

// binds the data to the TextView in each row
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    Task task = tList.get(position);
    **holder.tvText.setText(task.getMaterial());**
}

// allows clicks events to be caught
@Override
public int getItemCount() {
    return tList.size();
}

}

и основной код:

public class HomeScreen_activity extends AppCompatActivity implements View.OnClickListener {

List<Task> tList;
RecyclerView homercy;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.home_screen_layout);

    homercy = (RecyclerView) findViewById(R.id.homercy);
    homercy.setHasFixedSize(true);
    homercy.setLayoutManager(new LinearLayoutManager(this));

    // set up the RecyclerView
    RecyclerView recyclerView = findViewById(R.id.homercy);
    tList = new ArrayList<Task>();
    Task t1 = new Task("test","12","05");
    tList.add(t1);
    **HomeRecyclerViewAdapter adapter = new HomeRecyclerViewAdapter(this,tList);**
    recyclerView.setAdapter(adapter);

}

1 Ответ

0 голосов
/ 06 мая 2020

Возможно, в onCreateViewHolder() вы должны сделать это:

// inflates the row layout from xml when needed
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.home_recyclerview_row, parent, false);

return new ViewHolder(view);

}
...