Форум программистов, компьютерный форум, киберфорум
Программирование мобильных систем
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 04.12.2017
Сообщений: 1
1

Обработка нажатия на элемент списка, созданного из базы данных

16.10.2018, 15:46. Показов 1328. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Собственно тема такая..
Есть список песен с динамическим поиском, который, формируется с помощью SimpleCursorAdapter, а идет из базы данных.
Как правильно подключить обработчик нажатия на элемент списка?
Вот код:


SongsAct.java
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
package com.songsapp.songsapp;
 
import android.content.Intent;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.NavigationView;
import android.support.design.widget.Snackbar;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.FilterQueryProvider;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
 
 
public class SongsAct extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener{
 
 
 
 
    DBHelper sqlHelper;
    SQLiteDatabase db;
    Cursor userCursor;
    SimpleCursorAdapter userAdapter;
    ListView userList;
    EditText userFilter;
 
 
 
 
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_songs);
 
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
 
        userList = findViewById(R.id.userList);
        userFilter = findViewById(R.id.userFilter);
 
 
        sqlHelper = new DBHelper(getApplicationContext());
        // создаем базу данных
        sqlHelper.create_db();
 
 
 
        userList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> headers, View v, int position, long id) {
 
                //выход в новое Activity
                Intent intent = new Intent(SongsAct.this, firstArtist.class);
                startActivity(intent1);
            }
        });
 
 
 
 
 
        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });
 
 
 
 
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawer.addDrawerListener(toggle);
        toggle.syncState();
 
        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);
 
    }
 
 
 
 
   @Override
    public void onResume() {
        super.onResume();
 
 
        try {
            db = sqlHelper.open();
 
 
            userCursor = db.rawQuery("select * from " + DBHelper.TABLE, null);
            String[] headers = new String[]{DBHelper.COLUMN_NAME};
            int[] to = new int[]{R.id.text1};
 
            userAdapter = new SimpleCursorAdapter(this, R.layout.list_item,
                    userCursor, headers, to, 0);
 
 
 
 
            // если в текстовом поле есть текст, выполняем фильтрацию
            // данная проверка нужна при переходе от одной ориентации экрана к другой
            if(!userFilter.getText().toString().isEmpty())
                userAdapter.getFilter().filter(userFilter.getText().toString());
 
            // установка слушателя изменения текста
            userFilter.addTextChangedListener(new TextWatcher() {
 
                public void afterTextChanged(Editable s) { }
 
                public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
                // при изменении текста выполняем фильтрацию
                public void onTextChanged(CharSequence s, int start, int before, int count) {
 
                    userAdapter.getFilter().filter(s.toString());
                }
            });
 
            // устанавливаем провайдер фильтрации
            userAdapter.setFilterQueryProvider(new FilterQueryProvider() {
                @Override
                public Cursor runQuery(CharSequence constraint) {
 
                    if (constraint == null || constraint.length() == 0) {
 
                        return db.rawQuery("select * from " + DBHelper.TABLE, null);
                    }
                    else {
                        return db.rawQuery("select * from " + DBHelper.TABLE + " where " +
                                DBHelper.COLUMN_NAME + " like ?", new String[]{"%" + constraint.toString() + "%"});
                    }
                }
            });
 
            userList.setAdapter(userAdapter);
        }
        catch (SQLException ex){}
    }
    @Override
    public void onDestroy(){
        super.onDestroy();
        // Закрываем подключение и курсор
        db.close();
        userCursor.close();
    }
 
 
 
 
    @Override
    public void onBackPressed() {
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } else {
            super.onBackPressed();
        }
    }
 
    @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();
 
        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }
 
        return super.onOptionsItemSelected(item);
    }
 
 
 
 
    @SuppressWarnings("StatementWithEmptyBody")
    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
        // Handle navigation view item clicks here.
        int id = item.getItemId();
 
        if (id == R.id.nav_artists) {
 
            Intent intent = new Intent(this, SongsAct.class);
            startActivity(intent);
 
            return true;
        } else if (id == R.id.nav_favorite) {
 
            Intent intent = new Intent(this, Favorite.class);
            startActivity(intent);
 
        } else if (id == R.id.nav_history) {
 
        } else if (id == R.id.nav_settings) {
 
        } else if (id == R.id.nav_send) {
 
        }
 
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }
 
}
DBHelper.java

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
package com.songsapp.songsapp;
 
import android.database.SQLException;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase;
import android.content.Context;
import android.util.Log;
 
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
 
class DBHelper extends SQLiteOpenHelper {
    private static String DB_PATH; // полный путь к базе данных
    private static String DB_NAME = "songsinfo.db";
    private static final int SCHEMA = 1; // версия базы данных
    static final String TABLE = "songs"; // название таблицы в бд
    // названия столбцов
    static final String COLUMN_ID = "_id";
   // static final String COLUMN_NUMBER = "number";
    static final String COLUMN_NAME = "name";
 
    private Context myContext;
 
    DBHelper(Context context) {
        super(context, DB_NAME, null, SCHEMA);
        this.myContext=context;
        DB_PATH =context.getFilesDir().getPath() + DB_NAME;
    }
 
    @Override
    public void onCreate(SQLiteDatabase db) {
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion,  int newVersion) {
    }
 
    void create_db(){
        InputStream myInput = null;
        OutputStream myOutput = null;
        try {
            File file = new File(DB_PATH);
            if (!file.exists()) {
                this.getReadableDatabase();
                //получаем локальную бд как поток
                myInput = myContext.getAssets().open(DB_NAME);
                // Путь к новой бд
                String outFileName = DB_PATH;
 
                // Открываем пустую бд
                myOutput = new FileOutputStream(outFileName);
 
                // побайтово копируем данные
                byte[] buffer = new byte[1024];
                int length;
                while ((length = myInput.read(buffer)) > 0) {
                    myOutput.write(buffer, 0, length);
                }
 
                myOutput.flush();
                myOutput.close();
                myInput.close();
            }
        }
        catch(IOException ex){
            Log.d("DBHelper", ex.getMessage());
        }
    }
    SQLiteDatabase open()throws SQLException {
 
        return SQLiteDatabase.openDatabase(DB_PATH, null, SQLiteDatabase.OPEN_READWRITE);
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.10.2018, 15:46
Ответы с готовыми решениями:

Использование псевдопеременных: bd (3,5) = s, где bd - база данных, s - элемент базы данных, тогда с 3 по 5 элементы базы данных заменить на элемент s.
всем доброго времени суток! есть у меня класс bd, массив элементов этого класса table, а вот сам...

Из созданного списка удалить каждый второй элемент
Народ помогите пж. Из созданного списка удалить каждый второй элемент

Обработка нажатия на часть элемента списка
Как в Android обработать нажатие не на весь элемент списка ListView, а на отдельный его элемент?...

Обработка нажатия на элемент
Почему не работает (сообщение с надписью test выдает но при нажатии на link нечего не происходит):...

0
16.10.2018, 15:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.10.2018, 15:46
Помогаю со студенческими работами здесь

PyQt5. Обработка нажатия на элемент
Здравствуйте. Не срабатывает метод connect на чекбоксе. Что я делаю не так ? Спасибо! import...

Где происходит обработка нажатия на элемент?
Макросов нет, где может &quot;прятаться vba код&quot; не знаю. Интересует изменение значений в таблице...

Отлов события нажатия на элемент списка
На сайте есть список вида: &lt;select id=&quot;city_name&quot; name=&quot;ext_params&quot;&gt;&lt;option label=&quot;Любой...

Обработка данных после нажатия кнопки
Доброго всем вечера! Возникла проблема следующего характера - я не знаю как запустить php код после...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru