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

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

Войти
Регистрация
Восстановить пароль
 
Sonyk91
106 / 106 / 4
Регистрация: 01.10.2012
Сообщений: 1,909
Завершенные тесты: 1
#1

Как сделать, чтобы кнопка добавлялась не в каждую строку ListView, а только в самый низ? - Программирование Android

13.07.2014, 21:06. Просмотров 904. Ответов 10

Здравствуйте, форумчане. Как сделать чтобы кнопка не добавлялась в каждую строку ListView. Кнопка нужна только под ListView.
XML код
Кликните здесь для просмотра всего текста

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
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
 
    <Button
           android:id="@+id/button_start"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_alignParentBottom="true"
           android:onClick="onClick"
           android:text="Start" 
    />
    
   <ListView
        android:id="@+id/item_list_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true" 
        android:layout_above="@id/button_start"
        android:layout_marginBottom="30dip">
       
   </ListView>
  
    <ImageView
        android:id="@+id/img_track"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:padding="5dp"
    />
    <TextView
        android:id="@+id/tv_name_track"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/img_track"
        android:padding="5dp"
    />
    
</RelativeLayout>

Как сделать, чтобы кнопка добавлялась не в каждую строку ListView, а только в самый низ?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.07.2014, 21:06     Как сделать, чтобы кнопка добавлялась не в каждую строку ListView, а только в самый низ?
Посмотрите здесь:
Как сделать чтобы кнопка правильно располагалась Android
Android Как сделать, чтобы ListView читалось с конца
Android Как сделать, чтобы приложение запускалось только при налиции WiFi соединения?
Сделать так, чтобы и ListView отображал сообщения снизу вверх Android
Как из одного активити строку передать в другую в виде listView Android
Android Как вывести в ListView, только если тело SMS содержит определенный текст?
Кнопка в listView и обработчик нажатия Android
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Muhammad97
10 / 10 / 1
Регистрация: 10.11.2013
Сообщений: 238
14.07.2014, 04:28     Как сделать, чтобы кнопка добавлялась не в каждую строку ListView, а только в самый низ? #2
Скинь MaiActivity
Sonyk91
106 / 106 / 4
Регистрация: 01.10.2012
Сообщений: 1,909
Завершенные тесты: 1
14.07.2014, 09:43  [ТС]     Как сделать, чтобы кнопка добавлялась не в каждую строку ListView, а только в самый низ? #3
Muhammad97,
Кликните здесь для просмотра всего текста

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
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
package com.example.myfovoritesongs;
 
 
import java.util.ArrayList;
import android.app.Activity;
import android.app.LoaderManager.LoaderCallbacks;
import android.content.Loader;
import android.database.Cursor;
import android.database.MatrixCursor;
import android.media.AudioManager;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;
 
 
 
public class MainActivity extends Activity implements LoaderCallbacks<Cursor> {
    public static final Integer BLUE = 2;   // Цвет выделения
    private final int SIZE_ICON = 64;       // Размер иконки в списке трэков (обложка)
    
    Sound sound;        
    ArrayList<String> trackList;            // Список трэков
    private static ListView lv;             // Список трэков
    private static View ItemLV;             // Выделенный трэк в списке
    private int idTrack;                    // id выделенного трэка
    
    private final ArrayList<ListUserItem> fetch = new ArrayList<ListUserItem>();
    
    ListAdapter adapter;                    // Адаптер для формирования пунктов списка трэков
    
    SimpleCursorAdapter mAdapter;
    MatrixCursor mMatrixCursor;
    Cursor mThumbCursor;
    Cursor mImageCursor;
    
    String mThumbImageId="";
    String mThumbImageData="";
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        Intialization();
        
        // AUDIO_SERVICE - служба для управления медиа 
        // (запись, воспроизведение музыки, видео, громкостью, режимами тел. звонков)
        AudioManager am = (AudioManager) getSystemService(AUDIO_SERVICE);
        sound = new Sound(am);
        String Path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC).getPath();
        // Загружаем список треков
        trackList = sound.GetListMusicFiles(Path);      
        
        
        
        FillItemsTrackList(Path);
        
        
        lv = (ListView) findViewById(R.id.item_list_view);
        lv.setItemsCanFocus(false);
        //выводим в листе
        adapter = new ListAdapter(this, R.id.item_list_view, fetch);
        lv.setAdapter(adapter);
        
        /*try {
            // Запускаем поток и передаем url адрес на картинку сегодняшнего дня
            new SetAdapterListView(lv).execute();
        } catch (Exception e) {
            ShowError("Произошла ошибка при загрузке списка треков\n" + e.getMessage());
        }*/
        
        ListItemClick(lv);  // обработка нажатий на пункт ListView (список треков)
    }
    
    // Класс загрузки изображения в отдельном потоке
    private class SetAdapterListView extends AsyncTask<Void, Void, Void>{
        private ListView lv;
        
        // Конструктор по умолчанию
        // @param imgView элемент для графики
        SetAdapterListView(ListView lv) {
            this.lv = lv;
        }
        
        /*@Override
        protected void onPreExecute() {
          super.onPreExecute();
        }*/
 
        @Override
        // Перегруженный метод для обработки задачи
        // @param url URL
        protected Void doInBackground(Void... fetch) {
            try {   
                lv.setAdapter(adapter);
            } catch (Exception e) {
                Log.e("Error", e.getMessage());
                e.printStackTrace();
            }
            return null;
        }
        
        /*@Override
        // Перегруженный метод вызывается в конце выполнения задачи
        protected void onPostExecute(Void result) {}*/
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
 
    /**
     * A placeholder fragment containing a simple view.
     */
    /*public static class PlaceholderFragment extends Fragment {
 
        public PlaceholderFragment() {
        }
 
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_main, container,
                    false);
            
            return rootView;
        }
        
    }*/
    
    /*
     * Событие возникает при нажатии элементы активити
     */
    public void onClick(View view){
        switch(view.getId()){
            case R.id.button_start:
                String Path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC).getPath();
                ClickStart(view, Path); break;
            case R.id.button_stop:
                
                break;
            case R.id.button_prev_save:
                
                break;
            case R.id.button_prev:
                
                break;
        }
    }
    
    /*
     * Обработка события элемента списка Listview
     */
    private void ListItemClick(ListView lv) {
        lv.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
                try{
                    Log.d("Проверка клика по ListView Item", "itemClick: position = " + position + ", id = "
                            + id + "Track = " + trackList.get((int)id));
                    //view.setBackgroundColor(3);
                    view.setSelected(true);
                    ItemLV = view;
                    idTrack = (int)id;
                }
                catch(Exception exp){
                    ShowError("Произошла ошибка при выборе трека\n" + exp.getMessage());
                }
            }
 
 
          });
        
        lv.setOnItemSelectedListener(new OnItemSelectedListener() {
            public void onItemSelected(AdapterView<?> parent, View view,
                int position, long id) {
              Log.d("Select", "itemSelect: position = " + position + ", id = "
                  + id);
              
            }
 
            @Override
            public void onNothingSelected(AdapterView<?> arg0) {
                // TODO Auto-generated method stub
                
            }
        });
    }
 
    /*
     *  Заполнение списка трэк листа (listView)
     *  @param путь к директории с музыкой (имя обложки = "имя трэка.jpg")
     *  @return ArrayList<ListUserItem> fetch -  глобавльный массив заполненых треков (пуктов Listview)
     */
    private void FillItemsTrackList(String Path){
        int id = 0;
        for(int i = 0; i < trackList.size(); i++){
            String trakName = trackList.get(i);
            ListUserItem lui = new ListUserItem(String.valueOf(id), trakName, 
                    Path + "/" + trakName + ".jpg", SIZE_ICON);
            fetch.add(lui);
        }
    }
    
    /*
     * Обработка нажатия кнопки Start
     */
    private void ClickStart(View view, String path){
        if(((Button) view).getText() == "Start"){
            if(idTrack != -1){
                ((Button) view).setText("Pause");
                sound.Start(path + "/" + trackList.get(idTrack) + ".mp3");
            }
            else{
                ShowError("Выберете композицию для воспроизведения");               
            }
        }
        else{
            ((Button) view).setText("Start");
        }       
    }
    
    private void Intialization(){
        idTrack = -1;
    }
    
    // Метод выводит, на короткое время, сообщение на экран
    // @param message сообщение для вывода
    private void ShowError(String message){
        Toast toast = Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT);
        toast.setGravity(Gravity.CENTER, 0, 0);
        toast.show();
    }
    
    @Override
    public void onLoaderReset(Loader<Cursor> arg0) {
        // TODO Auto-generated method stub
        
    }
 
    @Override
    public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {
        // TODO Auto-generated method stub
        return null;
    }
 
    @Override
    public void onLoadFinished(Loader<Cursor> arg0, Cursor arg1) {
        // TODO Auto-generated method stub
        
    }
}
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
14.07.2014, 10:45     Как сделать, чтобы кнопка добавлялась не в каждую строку ListView, а только в самый низ? #4
поленился в Вашем коде разобраться... Но заметил что картинки разные. Значит где-то их задаете... значит можете 1) вычислить код/номер строки для втавки нужной картинки 2) если номер строки = количество строк, то для кнопки можно установить реквизит Visible.
Sonyk91
106 / 106 / 4
Регистрация: 01.10.2012
Сообщений: 1,909
Завершенные тесты: 1
14.07.2014, 11:11  [ТС]     Как сделать, чтобы кнопка добавлялась не в каждую строку ListView, а только в самый низ? #5
Tester64, пункты формируются в адаптаре, формирую только картинку и название (текст). Каждый пункт (неизвестно от куда) цепляет кнопку, которая должна располагаться только внизу (расположение кнопки указано в активитти). Если будет очень большой список, то приложение при отключении видимости кнопки будет кушать очень много памяти (не есть хорошо)...
Кликните здесь для просмотра всего текста
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
@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;
        ViewHolder holder;
        if (v == null) {
            LayoutInflater inflater = (LayoutInflater) activity
                            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = inflater.inflate(R.layout.activity_main, parent, false);
            holder = new ViewHolder();
            // инициализируем нашу разметку
            holder.textView = (TextView) v.findViewById(R.id.tv_name_track);
            holder.imageView = (ImageView) v.findViewById(R.id.img_track);
            v.setTag(holder);
        } else {
            holder = (ViewHolder) v.getTag();
        }
        ListUserItem listUserItem = entries.get(position);
        if (listUserItem != null) {
            holder.textView.setText(listUserItem.getNameTrack());               // получаем название трека
            holder.imageView.setImageBitmap(GetImage(listUserItem.getPath(), 
                    listUserItem.getSizePicture()));                            // получаем изображение              
        }
        return v;
    }
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
14.07.2014, 11:22     Как сделать, чтобы кнопка добавлялась не в каждую строку ListView, а только в самый низ? #6
кнопки вроде не много кушают память пока не отрисовываются... но если надо, разберитесь как вручную создавать компоненты. Знаю что можно, но для моих проектов пока не было нужно... И создавайте только в последнем вьюве. и не забудьте удалить если он вдруг перестанет быть последним.
Pablito
2419 / 1864 / 583
Регистрация: 12.05.2014
Сообщений: 6,604
Завершенные тесты: 1
14.07.2014, 11:24     Как сделать, чтобы кнопка добавлялась не в каждую строку ListView, а только в самый низ? #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Я возможно не вник в проблему, но вижу это так.
В getView() формируется элемент ListView. А из какой разметки он формируется? Правильно, из R.layout.activity_main что, как мне кажется, неверно.

Сам ListView должен быть помещен в R.layout.activity_main, а в низу этой разметки должна быть одна кнопка Start
В getView надо формировать элементы из совсем другой разметки, там не должно быть никакой кнопки, только RelativeLayout в котором картинка и что там еще по условию надо.
Sonyk91
106 / 106 / 4
Регистрация: 01.10.2012
Сообщений: 1,909
Завершенные тесты: 1
14.07.2014, 11:40  [ТС]     Как сделать, чтобы кнопка добавлялась не в каждую строку ListView, а только в самый низ? #8
Паблито, действительно помогло. Делал так, но выдавало ошибку. Решил сделать Clear project... (помогло)
xaxol_xaxol
6 / 6 / 0
Регистрация: 25.02.2012
Сообщений: 55
12.09.2014, 09:37     Как сделать, чтобы кнопка добавлялась не в каждую строку ListView, а только в самый низ? #9
а можно исходник получить?
Sonyk91
106 / 106 / 4
Регистрация: 01.10.2012
Сообщений: 1,909
Завершенные тесты: 1
12.09.2014, 13:57  [ТС]     Как сделать, чтобы кнопка добавлялась не в каждую строку ListView, а только в самый низ? #10
xaxol_xaxol, да можно. Напишите в личку...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.11.2016, 00:13     Как сделать, чтобы кнопка добавлялась не в каждую строку ListView, а только в самый низ?
Еще ссылки по теме:
Android Как сделать подзаголовки в списке listView
ListView кнопка добавить item в избранное Android
Android Сдвиг item в ListView не до конца, а под ним кнопка
Как добавить строку "." в начале в ListView со своим обработчиком Android
Как закрепить высоту EditText, чтобы помещался только один ряд символов Android

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

Или воспользуйтесь поиском по форуму:
Sonyk91
106 / 106 / 4
Регистрация: 01.10.2012
Сообщений: 1,909
Завершенные тесты: 1
26.11.2016, 00:13  [ТС]     Как сделать, чтобы кнопка добавлялась не в каждую строку ListView, а только в самый низ? #11
del
Yandex
Объявления
26.11.2016, 00:13     Как сделать, чтобы кнопка добавлялась не в каждую строку ListView, а только в самый низ?
Ответ Создать тему
Опции темы

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