при попытке использовать recyclerview, я не могу получить контент в объекте в держателе представления - PullRequest
0 голосов
/ 11 марта 2020

Я пытаюсь использовать recyclerview, и я пытаюсь разработать метод 'setText' в числе использования в видоискателе в параметре item.

Проблема в том, что когда я помещаю "item.getNumber ()" в Приложение метода setText не работает. Я не знаю, почему, когда я помещаю только строку в метод, не возникает проблем, а у "item.getNumber ()" возникают проблемы без сообщений об ошибках.

адаптер:

public class adapter extends RecyclerView.Adapter<adapter.ViewHolder> {
    ArrayList<data> items=new ArrayList<data>();

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        LayoutInflater inflater=LayoutInflater.from(parent.getContext());
        View itemView= inflater.inflate(R.layout.itemlayout, parent,false);
        return new ViewHolder(itemView);
    } 

    public void additem(data item){
        items.add(item);
    }

    @Override
    public void onBindViewHolder(@NonNull adapter.ViewHolder holder, int position) {
        data item=items.get(position);
        holder.setText(item);
    }

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

    static class ViewHolder extends RecyclerView.ViewHolder {
        TextView textView;
        EditText editText;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            textView = itemView.findViewById(R.id.textView);
            editText = itemView.findViewById(R.id.editText);
        }

        public void setText(data item) {
            textView.setText(item.getNumber());
            editText.setHint(item.getSentences());
        }
    }
}

mainActivity:

public class MainActivity extends AppCompatActivity {
    static int num = 6;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        RecyclerView recyclerView = findViewById(R.id.recyclerview);
        adapter adapter1 = new adapter();
        for (int i = 0; i < num; i++) {
            adapter1.additem(new data("sentences", i + 1));
        }
        recyclerView.setAdapter(adapter1);
        LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
        recyclerView.setLayoutManager(layoutManager);
    }
}

данные. java:

public class data {
    String sentences = null;
    int number;

    public int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
    }

    public data(String sentences, int number) {
        this.sentences = sentences;
        this.number = number;
    }

    public String getSentences() {
        return sentences;
    }

    public void setSentences(String sentences) {
        this.sentences = sentences;
    }
}

1 Ответ

0 голосов
/ 11 марта 2020

Проблема в том, что ваш метод getNumber() возвращает int:

public int getNumber() {
    return number;
}

Существует две разные версии TextView.setText(), одна из которых принимает String и тот, который принимает int. Версия, которая принимает int, ожидает идентификатор строкового ресурса (например, R.string.foo), и она не может сказать, что вы просто пытаетесь отобразить номер.

Измените свой вызов setText() так что вместо этого это выглядит так:

    textView.setText("" + item.getNumber());

Используя "" + item.getNumber(), вы убедитесь, что вы вызываете версию setText(), которая принимает String, и это будет означать что вы получите, чтобы отобразить номер, который вы ожидаете.

...