Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
yura91
2 / 26 / 2
Регистрация: 23.10.2013
Сообщений: 2,328
1

Адаптер обновляется автоматически

02.02.2017, 16:47. Просмотров 1019. Ответов 22
Метки нет (Все метки)

Я устанавливаю пустой список в адаптер Recyclerview а потом в onStart() просто читаю элементы из бызы данных в AsynkTask и адаптер не обновляю, но элементы в него все равно добавляются.
код активити
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
public class MainActivity extends AppCompatActivity {
    //private List<Movie> movieList = new ArrayList<>();
    private RecyclerView recyclerView;
    private MoviesAdapter mAdapter;
    private ImageButton btnAddSite;
    private ProgressDialog pDialog;
    private ArrayList<HashMap<String, String>> rssFeedList;
    private String[] sqliteIds;
    public static String TAG_ID = "id";
    public static String TAG_TITLE = "title";
    public static String TAG_LINK = "link";
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       /* Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);*/
 
        recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
        btnAddSite = (ImageButton) findViewById(R.id.btnAddSite);
        rssFeedList = new ArrayList<HashMap<String, String>>();
        mAdapter = new MoviesAdapter( rssFeedList);
        recyclerView.setHasFixedSize(true);
        RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
        recyclerView.setLayoutManager(mLayoutManager);
        recyclerView.addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.VERTICAL));
        recyclerView.setItemAnimator(new DefaultItemAnimator());
        recyclerView.setAdapter(mAdapter);
 
        recyclerView.addOnItemTouchListener(new RecyclerTouchListener(getApplicationContext(), recyclerView, new RecyclerTouchListener.ClickListener() {
            @Override
            public void onClick(View view, int position) {
               // Movie movie = movieList.get(position);
                //Toast.makeText(getApplicationContext(), movie.getTitle() + " is selected!", Toast.LENGTH_SHORT).show();
 
            /*    String sqlite_id = ((TextView) view.findViewById(R.id.sqlite_id)).getText().toString();
                // Starting new intent
                Intent in = new Intent(getApplicationContext(), ListRSSItemsActivity.class);
                // passing sqlite row id
                in.putExtra(TAG_ID, sqlite_id);
                startActivity(in);*/
            }
 
            @Override
            public void onLongClick(View view, int position) {
 
            }
        }));
 
        btnAddSite.setOnClickListener(new View.OnClickListener() {
 
            public void onClick(View v) {
                Intent i = new Intent(getApplicationContext(), AddNewSiteActivity.class);
                // starting new activity and expecting some response back
                // depending on the result will decide whether new website is
                // added to SQLite database or not
                startActivityForResult(i, 100);
            }
        });
 
        prepareMovieData();
    }
 
    private void prepareMovieData() {
 
    }
 
    @Override
    protected void onStart() {
        super.onStart();
        new loadStoreSites().execute();
    }
 
 
    class loadStoreSites extends AsyncTask<String, String, String> {
 
        /**
         * Before starting background thread Show Progress Dialog
         * */
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(
                    MainActivity.this);
            pDialog.setMessage("Loading websites ...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(false);
            pDialog.show();
        }
 
        /**
         * getting all stored website from SQLite
         * */
        @Override
        protected String doInBackground(String... args) {
            // updating UI from Background Thread
            //runOnUiThread(new Runnable() {
               // public void run() {
                    RSSDatabaseHandler rssDb = new RSSDatabaseHandler(
                            getApplicationContext());
 
                    // listing all websites from SQLite
                    List<WebSite> siteList = rssDb.getAllSites();
 
                    sqliteIds = new String[siteList.size()];
 
                    // loop through each website
                    for (int i = 0; i < siteList.size(); i++) {
 
                        WebSite s = siteList.get(i);
 
                        // creating new HashMap
                        HashMap<String, String> map = new HashMap<String, String>();
 
                        // adding each child node to HashMap key => value
                        map.put(TAG_ID, s.getId().toString());
                        map.put(TAG_TITLE, s.getTitle());
                        map.put(TAG_LINK, s.getLink());
 
                        // adding HashList to ArrayList
                        rssFeedList.add(map);
 
                        // add sqlite id to array
                        // used when deleting a website from sqlite
                        sqliteIds[i] = s.getId().toString();
                    }
                    /**
                     * Updating list view with websites
                     * */
 
                     /*adapter = new SimpleAdapter(
                            MainActivity.this,
                            rssFeedList, R.layout.site_list_row,
                            new String[] { TAG_ID, TAG_TITLE, TAG_LINK },
                            new int[] { R.id.sqlite_id, R.id.title, R.id.link });
                    // updating listview
                    recyclerView.setAdapter(adapter); */
                    //recyclerView.setAdapter(mAdapter);
                    //registerForContextMenu(recyclerView);
              //  }
            //});
            return null;
        }
 
        /**
         * After completing background task Dismiss the progress dialog
         * **/
        protected void onPostExecute(String args) {
            // dismiss the dialog after getting all products
            //mAdapter.update(rssFeedList);
            pDialog.dismiss();
        }
 
    }
}
Код адаптера

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
public class MoviesAdapter extends RecyclerView.Adapter<MoviesAdapter.MyViewHolder> {
 
    public static String TAG_ID = "id";
    public static String TAG_TITLE = "title";
    public static String TAG_LINK = "link";
    private List<HashMap<String, String>> moviesList = new ArrayList<HashMap<String, String>>();
 
    public class MyViewHolder extends RecyclerView.ViewHolder {
        public TextView sqlite_id, title, link;
 
        public MyViewHolder(View view) {
            super(view);
            sqlite_id = (TextView) view.findViewById(R.id.sqlite_id);
            title = (TextView) view.findViewById(R.id.title);
            link = (TextView) view.findViewById(R.id.link);
        }
    }
 
 
    public MoviesAdapter(List<HashMap<String, String>> moviesList) {
        this.moviesList = moviesList;
    }
 
    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.site_list_row, parent, false);
 
        return new MyViewHolder(itemView);
    }
 
    public void update(List<HashMap<String, String>> items) {
        this.moviesList.clear();
        this.moviesList.addAll(items);
        notifyDataSetChanged();
    }
 
    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        /*Movie movie = moviesList.get(position);
        holder.title.setText(movie.getTitle());
        holder.genre.setText(movie.getGenre());
        holder.year.setText(movie.getYear());*/
        WebSite s = new WebSite();
        holder.sqlite_id.setText(moviesList.get(position).get(TAG_ID));
        holder.title.setText(moviesList.get(position).get(TAG_TITLE));
        holder.link.setText(moviesList.get(position).get(TAG_LINK));
    }
 
    @Override
    public int getItemCount() {
        return moviesList.size();
    }
}
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.02.2017, 16:47
Ответы с готовыми решениями:

Не удается обновить данные в бд из DataTable, адаптер не обновляется
Добрый день. Заполняю datatablе значениями из базы. datatablе заполняю значениями из 2-х таблиц...

Автоматически не обновляется таблица
Есть форма добавления записей в бд &lt;div class=&quot;col-lg-7 col-sm-7&quot;...

Автоматически обновляется страница при вычислении
Добрый день! В отладчике код работает корректно -ссылка на код в plnkr.co Сам код $(function(){...

Проводник не обновляется автоматически после удаления, перемещения и создания папок
Всем Привет! После создания папок, удаления, переименования или вставки надо обязательно...

Адаптер пишет, что не может получить автоматически ip и dns
Добрый лень. Установил на компьютер новый сетевой адаптер, обновил драйвера. Пишет, что не может...

22
yura91
2 / 26 / 2
Регистрация: 23.10.2013
Сообщений: 2,328
02.02.2017, 22:20  [ТС] 21
всмысле переделок?
0
Hellrider_
50 / 50 / 4
Регистрация: 12.03.2013
Сообщений: 171
02.02.2017, 22:50 22
Цитата Сообщение от yura91 Посмотреть сообщение
всмысле переделок?
Нет, именно то что я написал, свистелки-перделки типа анимации всякой и штуки по сложнее...
0
yura91
2 / 26 / 2
Регистрация: 23.10.2013
Сообщений: 2,328
02.02.2017, 23:14  [ТС] 23
Еще есть одна проблема на счет RecyclerView
код активити
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
public class ListRSSItemsActivity extends Activity {
    
    // Progress Dialog
    private ProgressDialog pDialog;
    private RSSItemAdapter mAdapter;
    // Array list for list view
    ArrayList<HashMap<String, String>> rssItemList = new ArrayList<HashMap<String,String>>();
    private RecyclerView recyclerView;
    RSSParser rssParser = new RSSParser();
    
    // button add new website
    ImageButton btnAddSite;
    
    List<RSSItem> rssItems = new ArrayList<RSSItem>();
 
    RSSFeed rssFeed;
    
    private static String TAG_TITLE = "title";
    private static String TAG_LINK = "link";
    private static String TAG_DESRIPTION = "description";
    private static String TAG_PUB_DATE = "pubDate";
    private static String TAG_GUID = "guid"; // not used
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.rss_item_list);
 
        recyclerView = (RecyclerView) findViewById(R.id.recycler_view1);
        btnAddSite = (ImageButton) findViewById(R.id.btnAddSite);
        // hiding plus button
        btnAddSite.setVisibility(View.GONE);
        
        // get intent data
        Intent i = getIntent();
        mAdapter = new RSSItemAdapter( rssItemList);
        recyclerView.setAdapter(mAdapter);
        // SQLite Row id
        Integer site_id = Integer.parseInt(i.getStringExtra("id"));
        
        // Getting Single website from SQLite
        RSSDatabaseHandler rssDB = new RSSDatabaseHandler(getApplicationContext());
        
        
        WebSite site = rssDB.getSite(site_id);
        String rss_link = site.getRSSLink();
        
        /**
         * Calling a backgroung thread will loads recent articles of a website
         * @param rss url of website
         * */
        new loadRSSFeedItems().execute(rss_link);
        
        // selecting single ListView item
        //ListView lv = getListView();
 
        // Launching new screen on Selecting Single ListItem
        /*lv.setOnItemClickListener(new OnItemClickListener() {
 
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                Intent in = new Intent(getApplicationContext(), DisPlayWebPageActivity.class);
                
                // getting page url
                String page_url = ((TextView) view.findViewById(R.id.page_url)).getText().toString();
                in.putExtra("page_url", page_url);
                startActivity(in);
            }
        });*/
    }
    
    /**
     * Background Async Task to get RSS Feed Items data from URL
     * */
    class loadRSSFeedItems extends AsyncTask<String, String, String> {
 
        /**
         * Before starting background thread Show Progress Dialog
         * */
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(
                    ListRSSItemsActivity.this);
            pDialog.setMessage("Loading recent articles...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(false);
            pDialog.show();
        }
 
        /**
         * getting all recent articles and showing them in listview
         * */
        @Override
        protected String doInBackground(String... args) {
            // rss link url
            String rss_url = args[0];
            
            // list of rss items
            rssItems = rssParser.getRSSFeedItems(rss_url);
            
            // looping through each item
            for(RSSItem item : rssItems){
                // creating new HashMap
                HashMap<String, String> map = new HashMap<String, String>();
                
                // adding each child node to HashMap key => value
                map.put(TAG_TITLE, item.getTitle());
                map.put(TAG_LINK, item.getLink());
                map.put(TAG_PUB_DATE, item.getPubdate()); // If you want parse the date
                String description = item.getDescription();
                // taking only 200 chars from description
                if(description.length() > 100){
                    description = description.substring(0, 97) + "..";
                }
                map.put(TAG_DESRIPTION, description);
 
                // adding HashList to ArrayList
                rssItemList.add(map);
            }
            
            // updating UI from Background Thread
            runOnUiThread(new Runnable() {
                public void run() {
 
 
                    /**
                     ListAdapter adapter = new SimpleAdapter(
                            ListRSSItemsActivity.this,
                            rssItemList, R.layout.rss_item_list_row,
                            new String[] { TAG_LINK, TAG_TITLE, TAG_PUB_DATE, TAG_DESRIPTION },
                            new int[] { R.id.page_url, R.id.title, R.id.pub_date, R.id.link });*//**//*
                    
                    // updating listview
                    //setListAdapter(adapter);*/
                }
            });
            return null;
        }
 
        /**
         * After completing background task Dismiss the progress dialog
         * **/
        protected void onPostExecute(String args) {
            // dismiss the dialog after getting all products
            //recyclerView.setAdapter(mAdapter);
            mAdapter.update(rssItemList);
            pDialog.dismiss();
        }
    }
}
код адаптера RecyclerView
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
public class RSSItemAdapter extends RecyclerView.Adapter<RSSItemAdapter.MyViewHolder> {
 
 
    private static String TAG_TITLE = "title";
    private static String TAG_LINK = "link";
    private static String TAG_DESRIPTION = "description";
    private static String TAG_PUB_DATE = "pubDate";
    private List<HashMap<String, String>> rssList = new ArrayList<HashMap<String, String>>();
 
 
    public RSSItemAdapter(List<HashMap<String, String>> moviesList) {
        this.rssList = moviesList;
    }
 
    public void update(List<HashMap<String, String>> items) {
        this.rssList.clear();
        this.rssList.addAll(items);
        notifyDataSetChanged();
    }
    public class MyViewHolder extends RecyclerView.ViewHolder {
 
 
        public TextView page_url, title, pub_date, link;
 
 
 
 
        public MyViewHolder(View view) {
            super(view);
            page_url = (TextView) view.findViewById(R.id.page_url);
            title = (TextView) view.findViewById(R.id.title);
            pub_date = (TextView) view.findViewById(R.id.pub_date);
            link = (TextView) view.findViewById(R.id.link);
        }
    }
 
    @Override
    public RSSItemAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
 
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.rss_item_list_row, parent, false);
 
        return new RSSItemAdapter.MyViewHolder(itemView);
    }
 
    @Override
    public void onBindViewHolder(RSSItemAdapter.MyViewHolder holder, int position) {
 
        holder.page_url.setText(rssList.get(position).get(TAG_DESRIPTION));
        holder.title.setText(rssList.get(position).get(TAG_TITLE));
        holder.link.setText(rssList.get(position).get(TAG_LINK));
        holder.pub_date.setText(rssList.get(position).get(TAG_PUB_DATE));
    }
 
    @Override
    public int getItemCount() {
        return rssList.size();
    }
}
Добавлено через 2 минуты
Я получаю от сервера rssItemList но этот список никак не хочет отображаться в recyclerview. notifydatasetchanged срабатывает но данные в списке не отображаются rssItemList не пуст. Помогите решить проблему. Подскажите в чем здесь дело?
0
02.02.2017, 23:14
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.02.2017, 23:14

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Часто на 8-ке не обновляется (или криво обновляется) индекс вида после
Часто на 8-ке не обновляется (или криво обновляется) индекс вида после рефреша дизайна. Такого в...

Каждые 2 секунды формируется ответ с сервера и div обновляется. Как подвесить к нему событие, если он обновляется?
Посоветуйте, как поступить? Есть небольшой div, в котором выводится список файлов на сервере...

Wi-fi адаптер. Ноутбук перестал находить адаптер.
Ноутбук перестал находить адаптер вай фай, также не работает блитуз.. я даже не могу понять включен...


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

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

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