Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
motoroller
2 / 2 / 1
Регистрация: 01.05.2012
Сообщений: 116
#1

Глючит ListView - Программирование Android

01.06.2015, 18:36. Просмотров 269. Ответов 5
Метки нет (Все метки)

Получаю данные с сервера)
отображаю через ListView проблем нет. Но по нажатию по item listview хочу показать скрытое textview внутри item,
вроде бы просто, но дико глючит. По нажатию открывает не только скрытый textview в текущем item, но еще и другие почему равно через каждые 6 штук?

Скажите в чем может быть проблема?

Такк формируется вывод новости, при этом body - скрыто
XML
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
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
 
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/rl"
        android:padding="20dp">
 
        <!-- Image -->
        <com.android.volley.toolbox.NetworkImageView
            android:id="@+id/thumbnail"
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:layout_alignParentLeft="true"
            android:layout_marginRight="8dp"
            android:background="@drawable/news_image_border" />
 
        <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_centerVertical="true">
 
            <!-- Title -->
            <TextView
                android:layout_marginLeft="100dp"
                android:id="@+id/title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="15dp"
                android:textStyle="bold"
                android:textColor="@color/actionBar_backround"/>
 
            <!-- Date -->
            <TextView
                android:layout_marginLeft="100dp"
                android:id="@+id/date"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_below="@id/title"
                android:layout_marginTop="1dip"
                android:textSize="14dp" />
 
            </RelativeLayout>
 
        </RelativeLayout>
 
    <!-- Body -->
    <TextView
        android:id="@+id/body"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/rl"
        android:textColor="#000"
        android:textSize="16dp"
        android:paddingLeft="20dp"
        android:paddingRight="20dp"
        android:paddingBottom="20dp"
        android:visibility="gone" />
 
</RelativeLayout>
Код фрагмента: в котором происходит загрузка данных с сайта и отображение. А так идет клик по listitem, после которого открывается body не только в текущем Item но и в других(((

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
package ru.animalface.app;
 
import android.app.Fragment;
import android.app.ProgressDialog;
import android.os.Bundle;
 
import android.text.Layout;
import android.text.method.ScrollingMovementMethod;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.ScrollView;
import android.widget.TextView;
import android.widget.Toast;
 
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonArrayRequest;
import com.android.volley.toolbox.Volley;
 
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
 
import java.sql.Array;
import java.util.ArrayList;
import java.util.List;
 
import ru.animalface.app.adapter.VolleyListNewsAdapter;
import ru.animalface.app.model.News;
 
 
public class NewsFragment extends Fragment {
 
    private static List<News> newsList = new ArrayList<News>();
    private static ListView listView;
    private static VolleyListNewsAdapter volleyAdapter;
    private static Integer currentPage;
    private static Boolean loading;
    private static View rootView;
    // Progress
    private ProgressDialog pDialog;
 
    public NewsFragment(){}
 
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
 
            rootView = inflater.inflate(R.layout.fragment_news, container, false);
 
            pDialog = ProgressDialog.show(getActivity(), null, getResources().getString(R.string.loading), true);
            loading = true;
            currentPage = 0;
 
            listView = (ListView) rootView.findViewById(R.id.list_news);
            newsList = new ArrayList<News>();
            volleyAdapter = new VolleyListNewsAdapter(getActivity(), newsList);
            listView.setAdapter(volleyAdapter);
 
            RequestQueue queue = Volley.newRequestQueue(getActivity());
            JsonArrayRequest newsReqest = new JsonArrayRequest("https://animalface.ru/mobile/news/", createMyReqSuccessListener(), createMyReqErrorListener());
            // Adding request to request queue
            queue.add(newsReqest);
 
            // По клику новости показываем текст
            listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    //News n =  newsList.get(position);
 
 
 
 
 
                    //Log.v("My Project", "Позиция: " + position);
 
                   // News news = new News();
 
                    //news.setTitle(n.getTitle());
                    //news.setImage(n.getImage());
                    //news.setDate(n.getDate());
                    //news.setBody(n.getBody());
                    //news.setVisible(true);
 
                    //newsList.set(position, news);
                    //volleyAdapter.notifyDataSetChanged();
 
 
                   // volleyAdapter = new VolleyListNewsAdapter(getActivity(), newsList);
                    //listView.setAdapter(volleyAdapter);
 
                    //Log.v("My Project", "Массив: " + newsList);
 
                    TextView current = (TextView) view.findViewById(R.id.body);
                    current.setVisibility(TextView.VISIBLE);
                }
            });
 
 
            return rootView;
        }
 
    private Response.Listener<JSONArray> createMyReqSuccessListener() {
        return new Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray response) {
                pDialog.hide();
 
                // если есть данные то увелчиваем запрос на вывод страниц
                if (response.length() > 0) {
 
                    loading = true;
                    currentPage += 7;
 
                    for (int i = 0; i < response.length(); i++) {
                        try {
                            JSONObject obj = response.getJSONObject(i);
                            News news = new News();
                            news.setTitle(obj.getString("title"));
                            news.setImage(obj.getString("image"));
                            news.setDate(obj.getString("datePrint"));
                            news.setBody(obj.getString("body"));
                            news.setVisible(false);
                            newsList.add(news);
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                    // notifying list adapter about data changes
                    // so that it renders the list view with updated data
                    volleyAdapter.notifyDataSetChanged();
 
                } else {
                    loading = false;
                }
            }
        };
    }
 
    private Response.ErrorListener createMyReqErrorListener() {
        return new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                pDialog.hide();
                Toast.makeText(getActivity(), R.string.error_connection, Toast.LENGTH_LONG).show();
            }
        };
    }
}
Класс адаптера

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
package ru.animalface.app.adapter;
 
import ru.animalface.app.R;
import ru.animalface.app.app.AppController;
import ru.animalface.app.model.News;
 
import java.util.List;
 
import android.app.Activity;
import android.content.Context;
import android.text.Html;
import android.text.SpannableString;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.DecelerateInterpolator;
import android.widget.BaseAdapter;
import android.widget.TextView;
 
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.NetworkImageView;
 
public class VolleyListNewsAdapter extends BaseAdapter {
    private Activity activity;
    private LayoutInflater inflater;
    private List<News> newsItems;
 
    ImageLoader imageLoader = AppController.getInstance().getImageLoader();
 
    public VolleyListNewsAdapter(Activity activity, List<News> newsItems) {
        this.activity = activity;
        this.newsItems = newsItems;
    }
 
    @Override
    public int getCount() {
        return newsItems.size();
    }
 
    @Override
    public Object getItem(int location) {
        return newsItems.get(location);
    }
 
    @Override
    public long getItemId(int position) {
        return position;
    }
 
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
 
        if (inflater == null)
            inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 
        if (convertView == null)
            convertView = inflater.inflate(R.layout.drawer_list_news, null);
 
        if (imageLoader == null)
            imageLoader = AppController.getInstance().getImageLoader();
 
        // getting news data for the row
        News n = newsItems.get(position);
        TextView body = (TextView) convertView.findViewById(R.id.body);
 
        if(n.getVisible() == false) {
 
            TextView title = (TextView) convertView.findViewById(R.id.title);
            TextView date = (TextView) convertView.findViewById(R.id.date);
            NetworkImageView thumbNail = (NetworkImageView) convertView.findViewById(R.id.thumbnail);
 
            // title
            title.setText(n.getTitle());
 
            // body
            body.setText(Html.fromHtml(n.getBody()));
 
            // date
            date.setText(n.getDate());
 
            // thumbnail image
            thumbNail.setImageUrl(n.getImage(), imageLoader);
 
        } else {
            // body
            body.setVisibility(View.VISIBLE);
        }
 
        return convertView;
    }
 
}
Класс модели

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
package ru.animalface.app.model;
 
public class News {
    private String title, image, date, body;
    private Boolean visible;
 
    public News() {}
 
    public News(Boolean visible) {
        this.visible = visible;
    }
 
    public News(String title, String image, String date, String body, Boolean visible) {
        this.title = title;
        this.image = image;
        this.date = date;
        this.body = body;
        this.visible = visible;
    }
 
    public String getTitle() {
        return title;
    }
 
    public void setTitle(String title) {
        this.title = title;
    }
 
    public String getImage() {
        return image;
    }
 
    public void setImage(String image) {
        this.image = image;
    }
 
    public String getDate() {
        return date;
    }
 
    public void setDate(String date) {
        this.date = date;
    }
 
    public String getBody() {
        return body;
    }
 
    public void setBody(String body) {
        this.body = body;
    }
 
    public Boolean getVisible() {
        return visible;
    }
 
    public void setVisible(Boolean visible) {
        this.visible = visible;
    }
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2015, 18:36     Глючит ListView
Посмотрите здесь:

ListView. После добавления кнопки перестал быть доступен сам ListView - Программирование Android
Кастомизировал ListView с помощью нескольких TextView. Но после того, как добавил ImageButton сам список стал недоступен для клика, а...

Listview вывод данных и переход по нажатию на другой Listview SQLite - Программирование Android
Доброго извините за название темы, долго не мог сформировать название, В общем у меня беда с пытаюсь написать программу где первый экран...

Данные из SQlite в ListView, обработка события ListView - Программирование Android
Ребят, есть БД, ListView. Надо при нажатии на строчку ListView вытащить данные int из БД. mList.setOnItemClickListener(new...

ListView, ToggleButton, SQLite, CursorAdapter. Как найти idItem в ListView, где была нажата ToggleButton? - Программирование Android
Добрый день. Затрудняюсь понять один момент: У меня есть ListView, который заполнен Items. Каждый Item - это свой XML. Пока...

Копирование данных из 1 listView во 2 listView - Программирование Android
Нужно что бы при нажатии на один элемент в первом ListView он копировался во второй ListView причём многократно.Но я использую...

Переход из Listview в Listview - Программирование Android
Как сделать, что бы когда нажимаешь в главном листвью на кнопку, открывалось новое нужное(т.е. то по которому тапнули) активити с другим...

Использование ListView в ListView - Программирование Android
Всем привет. Можете показать как использовать ListView в ListView, с заполнением как внешнего ListView, так и внутреннего причем с...

Глючит кнопка Домой. Что делать? - Программирование Android
У меня LG L Fino .Сегодня заметил что начала глючить кнопка home .Бывает вообще целая нижня часть с доп. клавишами не работает . Делал...

Глючит получение id группы по id контакта телефонной книги - Программирование Android
Все перерыл, не могу решить проблему Перепробовал разные методы получения айдишника группы, в которой находится контакт, по айдишнику...

TextView глючит на старых версиях Android и в теме Holo - Программирование Android
Написал программу на стандартной теме... Всё работает! Теперь решил поменять тему на Holo. Поменял и оказалось что на одном сотике у меня...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
01.06.2015, 20:01     Глючит ListView #2
Потому что листвью отображает только видимое, т.е. 6 строк.
motoroller
2 / 2 / 1
Регистрация: 01.05.2012
Сообщений: 116
01.06.2015, 20:10  [ТС]     Глючит ListView #3
Хорошо, а как быть в моем случае?
То есть мне надо показать только текст у текущей новости. А не у всех. Как действовать?
vindigo
18 / 18 / 3
Регистрация: 15.05.2014
Сообщений: 78
02.06.2015, 20:07     Глючит ListView #4
Недавно кое-как поборол эту проблему... Правда ситуация была немного другая, попробуйте так:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
if(n.getVisible() == false) {
 
            TextView title = (TextView) convertView.findViewById(R.id.title);
            TextView date = (TextView) convertView.findViewById(R.id.date);
            NetworkImageView thumbNail = (NetworkImageView) convertView.findViewById(R.id.thumbnail);
 
            // title
            title.setText(n.getTitle());
 
            // body
            body.setText(Html.fromHtml(n.getBody()));
            body.setVisibility(View.INVISIBLE); // т.е. принудительно указать, что боди должен быть скрытым
 
            // date
            date.setText(n.getDate());
 
            // thumbnail image
            thumbNail.setImageUrl(n.getImage(), imageLoader);
 
        } else {
            // body
            body.setVisibility(View.VISIBLE);
        }
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
02.06.2015, 20:15     Глючит ListView #5
vindigo, я ему тут уже расписал подробно Как добраться до объекта
vindigo
18 / 18 / 3
Регистрация: 15.05.2014
Сообщений: 78
02.06.2015, 20:28     Глючит ListView #6
Технично расписано. Надо в своем проекте также попробовать...
Yandex
Объявления
02.06.2015, 20:28     Глючит ListView
Ответ Создать тему
Опции темы

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