Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
_RomKa_
0 / 0 / 0
Регистрация: 16.08.2017
Сообщений: 3
1

Как вычислить параметр "position" в методе notifyItemChanged(int position) (RecyclerView.Adapter)

16.08.2017, 14:39. Просмотров 1114. Ответов 5

Добрый день, прошу о помощи начинающему программисту)))
Есть 2 фрагмента: 1й - список вьюшек, полученный с использованием виджета RecyclerView, 2й - детализация каждой вьюшки. Когда из списка перехожу в детализацию (2-й фрагмент), меняю текст в одном из EditText, жму "назад", попадаю на 1й фрагмент - список всех вьюшек и в нем зависимое Item (соответствующее поле TextView) не меняется....
Метод mAdapter.notifyDataSetChanged() - помогает, однако, он обновляет весь список, а нужен конкретный Item, а точнее его позиция для передачи в notifyItemChanged(int position).

Вопрос: как определить позицию (int position).

Cпасибо, за помощь!
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.08.2017, 14:39
Ответы с готовыми решениями:

RecyclerView Adapter
Пример классического создания адаптера RecyclerView public class UserDialogRecyclerAdapter extends...

Adapter + auto scroling RecyclerView
Всем привет! Начну сразу с постановки задачи: поступают данные, нам нужно поместить эти данные в...

RecyclerView.Adapter загрузка изображения
При прокрутке RecycleView в ImageView загружается необходимая фотография.. Но при прокрутке почему...

Background resource для нескольких элементов в recyclerview.adapter
Наверно по теме не очень понятно что я имею ввиду, объясню на скрине public void...

Тип "BookContext" не может быть использован как параметр типа "TContext" в универсальном методе Database.SetInitializer
помогите пожалуйста, как исправить эту ошибку Ошибка CS0311 Тип "BookStore.Models.BookContext"...

5
Pablito
2831 / 2251 / 760
Регистрация: 12.05.2014
Сообщений: 7,854
Завершенные тесты: 1
16.08.2017, 15:42 2
код где?
0
_RomKa_
0 / 0 / 0
Регистрация: 16.08.2017
Сообщений: 3
16.08.2017, 15:46  [ТС] 3
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package com.example.viako.crimimalintent;
 
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.TextView;
 
import java.text.SimpleDateFormat;
import java.util.List;
 
public class CrimeListFragment extends Fragment {
    private RecyclerView mCrimeRecyclerView;
    private CrimeAdapter mAdapter;
 
    @Override
    public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
        View v = inflater.inflate(R.layout.fragment_crime_list,container,false);
        mCrimeRecyclerView = (RecyclerView)v.findViewById(R.id.crime_recycle_view);
        mCrimeRecyclerView.setLayoutManager(new LinearLayoutManager (getActivity()));
        updateUI();
        return v;
    }
 
    @Override
    public void onResume (){
        super.onResume();
        updateUI();
    }
 
    private void updateUI() {
        CrimeLab crimeLab = CrimeLab.get(getActivity());
        List<Crime> crimes = crimeLab.getCrimes();
 
        if (mAdapter == null){
            mAdapter = new CrimeAdapter(crimes);
            mCrimeRecyclerView.setAdapter(mAdapter);
        } else {
 
            mAdapter.notifyItemChanged(position) - вот здесь!
            
        }
 
    }
 
    private class CrimeHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
 
        private TextView mTitleTextView;
        private TextView mDateTextView;
        private CheckBox mSolvedCheckBox;
        private Crime mCrime;
 
        public CrimeHolder(View itemView) {
            super(itemView);
            itemView.setOnClickListener(this);
            mTitleTextView = (TextView)itemView.findViewById(R.id.list_item_crime_title_text_view);
            mDateTextView = (TextView)itemView.findViewById(R.id.list_item_crime_date_text_view);
            mSolvedCheckBox = (CheckBox)itemView.findViewById(R.id.list_item_crime_solved_check_box);
        }
 
        public void bindCrime(Crime crime){
            mCrime = crime;
            mTitleTextView.setText(mCrime.getTitle());
            mDateTextView.setText(new SimpleDateFormat("EEEE, dd.MM.yyyy HH:mm").format(mCrime.getDate()));
            mSolvedCheckBox.setChecked(mCrime.getSolved());
        }
 
        @Override
        public void onClick(View view) {
            startActivity(CrimeActivity.newIntent(getActivity(),mCrime.getId()));
        }
    }
 
    private class CrimeAdapter extends RecyclerView.Adapter<CrimeHolder> {
        private List <Crime> mCrimes;
 
        public CrimeAdapter(List<Crime> crimes){
            mCrimes = crimes;
        }
 
        @Override
        public CrimeHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            LayoutInflater layoutInflater = LayoutInflater.from(getActivity());
            View view = layoutInflater.inflate(R.layout.list_item_crime, parent, false);
            return new CrimeHolder(view);
        }
        @Override
        public void onBindViewHolder(CrimeHolder holder, int position) {
            Crime crime = mCrimes.get(position);
            holder.bindCrime(crime);
        }
        @Override
        public int getItemCount() {
            return mCrimes.size();
        }
 
    }
}
0
Araikovich
10 / 9 / 1
Регистрация: 09.08.2017
Сообщений: 62
17.08.2017, 08:14 4
просто создай статическую переменную, в которой будешь хранить значение position нажатого элемента recyclerview, самое просто решение в данной ситуации, но это немного "говнокод")
0
Pablito
2831 / 2251 / 760
Регистрация: 12.05.2014
Сообщений: 7,854
Завершенные тесты: 1
17.08.2017, 10:30 5
Лучший ответ Сообщение было отмечено _RomKa_ как решение

Решение

как-то так
Java
1
startActivity(CrimeActivity.newIntent(getActivity(),mCrime.getId(), getAdapterPosition()));
getAdapterPosition() - это метод холдера, который вернет позицию нажатого элемента в списке

ну или передавай его куда-там надо по логике, главное что есть такой метод

статика - говнокод
1
_RomKa_
0 / 0 / 0
Регистрация: 16.08.2017
Сообщений: 3
17.08.2017, 17:54  [ТС] 6
Спасибо за метод! Помог, только я его использовал не в startActivity, а:
Java
1
2
3
4
5
@Override
        public void onClick(View view) {
            mX = getAdapterPosition();
            startActivity(CrimeActivity.newIntent(getActivity(),mCrime.getId()));
        }
Добавлено через 58 секунд
Спасибо за помощь, обошелся без статической переменной)
0
17.08.2017, 17:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.08.2017, 17:54

Исправить ошибку C2664: fcvt: невозможно преобразовать параметр из "int" в "int *"
ПИшу програму перевод дробового числа с указанием количесв цифр после точки , с инт в чар !!!!Но...

Как связать блоки position: absolute; и position: relative; ?
Имеется слайдер position: absolute;. Картинка слайдера уменьшается пропорционально при уменьшении...

Как в методе вызвать другой метод? У обоих различается параметр "e"
Добрый день. Изучать С# начал недавно. У меня сложилась такая ситуация. Хочу в методе public void...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru