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

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

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

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

13.07.2014, 21:06. Просмотров 916. Ответов 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):

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

Как сделать чтобы кнопка правильно располагалась - Программирование Android
Как сделать чтобы кнопка располагалась поверх RecyclerView и в тоже время внизу экрана(привязана к нижней его границе)? Вот разметка ...

Как сделать, чтобы listbox автоматически отображал самый низ? - C#
Скажите, как сделать, чтобы listbox автоматически отображал самый низ. по умолчанию он отображает самый верх и приходиться его...

У меня есть таблица из двух строк, как сделать так чтобы нажав на строку и именно под ней добавлялась ноавая - HTML, CSS
у меня есть таблица из двух строк, как сделать так чтобы нажав на строку и именно под ней добавлялась новая строка

Как сделать, чтобы форму можно было перетащить не только за самый верх? - FoxPro
Добрый день! Подскажите пожалуйста, как сделать, чтобы форму можно было перетащить не только за самый верх?

Как сделать чтобы из MenuStrip добавлялась название продукта - Visual Basic .NET
помогите пожалуйста,как сделать чтобы из MenuStrip добавлялась название продукта и его стоимость в ComboBox..заранее спасибо

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Muhammad97
10 / 10 / 1
Регистрация: 10.11.2013
Сообщений: 238
14.07.2014, 04:28 #2
Скинь MaiActivity
Sonyk91
110 / 111 / 4
Регистрация: 01.10.2012
Сообщений: 1,918
Завершенные тесты: 1
14.07.2014, 09:43  [ТС] #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
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
14.07.2014, 10:45 #4
поленился в Вашем коде разобраться... Но заметил что картинки разные. Значит где-то их задаете... значит можете 1) вычислить код/номер строки для втавки нужной картинки 2) если номер строки = количество строк, то для кнопки можно установить реквизит Visible.
Sonyk91
110 / 111 / 4
Регистрация: 01.10.2012
Сообщений: 1,918
Завершенные тесты: 1
14.07.2014, 11:11  [ТС] #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
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
14.07.2014, 11:22 #6
кнопки вроде не много кушают память пока не отрисовываются... но если надо, разберитесь как вручную создавать компоненты. Знаю что можно, но для моих проектов пока не было нужно... И создавайте только в последнем вьюве. и не забудьте удалить если он вдруг перестанет быть последним.
Pablito
2474 / 1919 / 596
Регистрация: 12.05.2014
Сообщений: 6,747
Завершенные тесты: 1
14.07.2014, 11:24 #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Я возможно не вник в проблему, но вижу это так.
В getView() формируется элемент ListView. А из какой разметки он формируется? Правильно, из R.layout.activity_main что, как мне кажется, неверно.

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

Нужно чтобы div опустился в самый низ - HTML, CSS
Нужно чтобы div опустился в самый низ, чтобы все выровнялось.. Цена и добавить в корзину находятся в div, как отпустить этот div вниз...

Как сделать, чтобы запятая после последнего значения не добавлялась? - C#
Я использую цикл for each. Я делаю строку из значений через запятую. Как сделать чтобы запятая после последнего значения не добавлялась?

как сделать чтобы программа добавлялась в автозапуск при старте windows - Visual Basic
подскажите какой код нужен для того чтобы когда пользователь запустит программу она автоматически добавлялась бы в автозапуск(а не когда он...

Как сделать чтобы программа при первом запуске добавлялась в автозагрузку? - C++
Как сделать чтобы программа при первом запуске добавлялась в автозагрузку? А потом при каждом запуске ПК, висела в процессах просто, и...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
26.11.2016, 00:13
Ответ Создать тему
Опции темы

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