Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
motoroller
2 / 2 / 1
Регистрация: 01.05.2012
Сообщений: 116
#1

Глючит ListView

01.06.2015, 18:36. Просмотров 315. Ответов 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;
    }
 
}

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

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2015, 18:36
Ответы с готовыми решениями:

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

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

Передача данных из ListView в другой Activity в ListView
Добрый день. Пытаюсь разобраться с передачей данных с ListView, но выходит что...

Данные из SQlite в ListView, обработка события ListView
Ребят, есть БД, ListView. Надо при нажатии на строчку ListView вытащить данные...

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

5
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,074
01.06.2015, 20:01 #2
Потому что листвью отображает только видимое, т.е. 6 строк.
0
motoroller
2 / 2 / 1
Регистрация: 01.05.2012
Сообщений: 116
01.06.2015, 20:10  [ТС] #3
Хорошо, а как быть в моем случае?
То есть мне надо показать только текст у текущей новости. А не у всех. Как действовать?
0
vindigo
20 / 20 / 3
Регистрация: 15.05.2014
Сообщений: 80
02.06.2015, 20:07 #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);
        }
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,074
02.06.2015, 20:15 #5
vindigo, я ему тут уже расписал подробно Как добраться до объекта
0
vindigo
20 / 20 / 3
Регистрация: 15.05.2014
Сообщений: 80
02.06.2015, 20:28 #6
Технично расписано. Надо в своем проекте также попробовать...
0
02.06.2015, 20:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.06.2015, 20:28

Копирование данных из 1 listView во 2 listView
Нужно что бы при нажатии на один элемент в первом ListView он копировался во...

Использование ListView в ListView
Всем привет. Можете показать как использовать ListView в ListView, с...

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


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

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

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