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

Поиск как в браузере - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Непонятка с разметкой http://www.cyberforum.ru/android-dev/thread1725953.html
Имею почему-то 0 вместо слова Аватар. <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="10dp"> <ImageView
Программирование Android MediaPlayer переключение Добрый день. Реализую переключение музыкальных файлов. Есть код. Всё просто. Одна кнопка - один трек. Всего два трека - две кнопки. Первый раз, всё успешно проигрывается, но при повторных нажатиях, на одна композиция не играет. Каким образом можно это выполнить? MediaPlayer Dzhin = new MediaPlayer(); MediaPlayer Moreana = new MediaPlayer(); public void DzhinPlay(View view)... http://www.cyberforum.ru/android-dev/thread1725944.html
Программирование Android Recyclerview при onLongItemClick срабатывает и onItemClick?
использую такой класс для клика по айтемам: нажимаю долгий клик открывается контекстменю а так же происходит обычный клих на этом айтеме, в чем может быть дело, помогите пожалуйста? Добавлено через 6 минут не понял что это было, но когда достал USB из телефона, все стало работать как должно %-), подсоединил опять глючит.... отбой вопроса вроде вышеприведенный класс корректный....
Обновление данных Программирование Android
Добрый день. Еще такая проблема возникла. Есть форма где нужно редактировать информацию, ввел нужные коррективы и нажал кнопку сохранить оно обновляет ее в базе. А вот когда нажимаю кнопку назад в Toolbar. информация не обновляется почему. Что изменение вступили в силу мне нужно перейти на главное окно приложения и зайти потом. Вот как этого избежать при нажатии назад чтобы выводилось...
Программирование Android Ошибка minSDK(API 23, N preview) != deviceSDK(API 17) http://www.cyberforum.ru/android-dev/thread1725858.html
Недавно начал учить андроид и возникла такая ошибка, когда я пытаюсь запустить проект на своем телефоне или эмуляторе. При этом в проекте выставлено "minSdkVersion 15". Режим отладки включен, драйверы установлены.
Программирование Android Форматирование строки, полученной из БД Доброго времени суток! Сразу скажу, что пытался найти, как выполнить форматирование строки, но нашел только способ, когда в Strings создается строка. И к ней вроде как автоматически уже понимается форматирование. Можно привычными тегами, типа <b>, <i> и прочими немного разнообразить отображение строки. Но мне нужно проделать то же самое, только со строкой, которая получается из БД. И вот это у... подробнее

Показать сообщение отдельно
Retper
0 / 0 / 0
Регистрация: 28.10.2013
Сообщений: 40
03.05.2016, 15:49  [ТС]     Поиск как в браузере
Паблито

Не по теме:

Чтобы просто по каждой мелочи не спрашивать вас, а попытаться самому исправить, пытаюсь понять, как работает то, что вы сделали. Но моих познаний никак не хватает Поэтому пишу:


Странно, что если сделать так, что весь Layout находится внутри ScrollView, то перескок ошибается на пару строк и не достает. Не получилось самому устранить. А так да, ваш код шикарно работает, когда TextView находится внутри ScrollView.
Исправить ошибку с вставкой вашего поиска в свой проект так и не получилось. Такое ощущение, что ошибка какая-то простая и я просто что-то недоглядел. Но не знаю. Вот код моего проекта (не знаю, может по какой-то причине понадобятся все классы):
3 класса:
1) DatabaseHelper:
Кликните здесь для просмотра всего текста
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
package com.example.admin.vkr;
 
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.provider.BaseColumns;
 
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.SQLException;
 
public class DatabaseHelper extends SQLiteOpenHelper implements BaseColumns {
    private static String DB_PATH = "/data/data/com.example.admin.vkr/databases/";
    private static String DB_NAME = "games.db";
    private static final int SCHEMA = 1; // версия базы данных
    static final String TABLE1 = "names";
    public static final String COLUMN_ID = "_id";
    public static final String COLUMN_NAME = "game_name";
    static final String TABLE2 = "games";
    public static final String COLUMN_GAME_NAME = "name";
    public static final String COLUMN_RELEASE_DATE = "release_date";
    public static final String COLUMN_GENRE = "genre";
    public static final String COLUMN_WALKTHROUGH = "walkthrough";
    public SQLiteDatabase database;
    private Context myContext;
 
    public DatabaseHelper(Context context) {
        super(context, DB_NAME, null, SCHEMA);
        this.myContext=context;
    }
 
    @Override
    public void onCreate(SQLiteDatabase db) {
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion,  int newVersion) {
 
    }
 
    public void create_db(){
        InputStream myInput = null;
        OutputStream myOutput = null;
        try {
            File file = new File(DB_PATH + DB_NAME);
            if (!file.exists()) {
                this.getReadableDatabase();
                myInput = myContext.getAssets().open(DB_NAME);
                String outFileName = DB_PATH + DB_NAME;
                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){
 
        }
    }
    public void open() throws SQLException {
        String path = DB_PATH + DB_NAME;
        database = SQLiteDatabase.openDatabase(path, null,
                SQLiteDatabase.OPEN_READWRITE);
 
    }
 
    @Override
    public synchronized void close() {
        if (database != null) {
            database.close();
        }
        super.close();
    }
}

2) game (здесь как раз и реализуется поиск)
Кликните здесь для просмотра всего текста
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
package com.example.admin.vkr;
 
import android.database.Cursor;
import android.graphics.Rect;
import android.os.Bundle;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.text.Html;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.TextWatcher;
import android.text.method.ScrollingMovementMethod;
import android.text.style.BackgroundColorSpan;
import android.view.View;
import android.widget.EditText;
import android.widget.ScrollView;
import android.widget.TextView;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
public class game extends AppCompatActivity {
    DatabaseHelper sqlHelper;
    String name;
    private final ArrayList<Integer> posList = new ArrayList<>();
    private int current;
    private TextView tv;
    private BackgroundColorSpan colorSpan;
    private EditText et;
    private final Rect r = new Rect();
    private ScrollView scrollView;
 
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.game);
        name = getIntent().getExtras().getString("name");
        sqlHelper = new DatabaseHelper(getApplicationContext());
        sqlHelper.create_db();
        colorSpan = new BackgroundColorSpan(ContextCompat.getColor(this, R.color.colorAccent));
        tv = (TextView) findViewById(R.id.walkthrough);
        //tv.setMovementMethod(new ScrollingMovementMethod());
        findViewById(R.id.nextButton).setOnClickListener(btnClickListener);
        findViewById(R.id.prevButton).setOnClickListener(btnClickListener);
        et = (EditText) findViewById(R.id.editText);
        et.addTextChangedListener(textWatcher);
        scrollView = (ScrollView) findViewById(R.id.scrollView1);
    }
 
    private final View.OnClickListener btnClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (v.getId() == R.id.nextButton) current++;
            else current--;
            if (current < 0) current = posList.size() - 1;
            else if (current >= posList.size()) current = 0;
            findOccurrence();
        }
    };
 
    private final TextWatcher textWatcher = new TextWatcher() {
 
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }
 
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
        }
 
        @Override
        public void afterTextChanged(Editable s) {
            posList.clear();
            Pattern p = Pattern.compile(s.toString());
            Matcher m = p.matcher(tv.getText().toString());
            while (m.find()) posList.add(m.start());
            current = 0;
            findOccurrence();
        }
    };
 
    private void findOccurrence() {
        String where = tv.getText().toString();
        if (posList.isEmpty()) {
            tv.setText(where);
        } else {
            Spannable selectSpan = new SpannableString(where);
            int spanStart = posList.get(current);
            int spanEnd = spanStart + et.getText().toString().length();
            selectSpan.setSpan(colorSpan, spanStart, spanEnd, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            tv.setText(selectSpan);
            scrollView.getDrawingRect(r);
            int bottom = tv.getLayout().getLineBottom(tv.getLayout().getLineForOffset(spanEnd));
            if (bottom > r.height()) scrollView.scrollTo(0, bottom - r.height() + scrollView.getPaddingBottom() + scrollView.getPaddingTop());
            if (bottom < r.height()) scrollView.scrollTo(0, 0);
        }
    }
 
    public void onResume() {
        super.onResume();
        try {
            sqlHelper.open();
            String query = "select * from " + DatabaseHelper.TABLE2 + " where " +
                    DatabaseHelper.COLUMN_GAME_NAME + " like '" + name + "'";
            Cursor cursor2 = sqlHelper.database.rawQuery(query, null);
            cursor2.moveToFirst();
            String gameName = cursor2.getString(cursor2.getColumnIndex(DatabaseHelper.COLUMN_GAME_NAME));
            String releaseDate = cursor2.getString(cursor2.getColumnIndex(DatabaseHelper.COLUMN_RELEASE_DATE));
            String genre = cursor2.getString(cursor2.getColumnIndex(DatabaseHelper.COLUMN_GENRE));
            String walkthrough = cursor2.getString(cursor2.getColumnIndex(DatabaseHelper.COLUMN_WALKTHROUGH));
            TextView nameTextView = (TextView) findViewById(R.id.name);
            nameTextView.setText(gameName);
            TextView releaseTextView = (TextView) findViewById(R.id.release_date);
            releaseTextView.setText(releaseDate);
            TextView genreTextView = (TextView) findViewById(R.id.genre);
            genreTextView.setText(genre);
            tv.setText(Html.fromHtml(walkthrough), TextView.BufferType.SPANNABLE);
            cursor2.close();
        }
        catch (SQLException ex) {}
    }
}

3) MainActivity
Кликните здесь для просмотра всего текста
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
package com.example.admin.vkr;
 
import android.content.Intent;
import android.database.Cursor;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.FilterQueryProvider;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
 
import java.sql.SQLException;
 
public class MainActivity extends AppCompatActivity{
    ListView lv;
    EditText userFilter;
    DatabaseHelper sqlHelper;
    Cursor userCursor;
    SimpleCursorAdapter userAdapter;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        lv = (ListView)findViewById(R.id.userList);
        userFilter = (EditText)findViewById(R.id.userFilter);
        sqlHelper = new DatabaseHelper(getApplicationContext());
        sqlHelper.create_db();
    }
    @Override
    public void onResume(){
        super.onResume();
        try {
            sqlHelper.open();
            userCursor = sqlHelper.database.rawQuery("select * from " + DatabaseHelper.TABLE1, null);
            String[] headers = new String[]{DatabaseHelper.COLUMN_NAME};
            userAdapter = new SimpleCursorAdapter(this, android.R.layout.two_line_list_item,
                    userCursor, headers, new int[]{android.R.id.text1}, 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 sqlHelper.database.rawQuery("select * from " + DatabaseHelper.TABLE1, null);
                    }
                    else {
                        return sqlHelper.database.rawQuery("select * from " + DatabaseHelper.TABLE1 + " where " +
                                DatabaseHelper.COLUMN_NAME + " like ?", new String[]{"%" + constraint.toString() + "%"});
                    }
                }
            });
 
            lv.setAdapter(userAdapter);
        }
        catch (SQLException ex){}
        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View itemClicked, int position,
                                    long my_id) {
                Intent intent = new Intent(MainActivity.this, game.class);
                Cursor mycursor = (Cursor) getListView().getItemAtPosition(position);
                intent.putExtra("name", mycursor.getString(1));
                startActivity(intent);
            }
        });
    }
 
    @Override
    public void onDestroy(){
        super.onDestroy();
        sqlHelper.database.close();
        userCursor.close();
    }
 
    public AdapterView getListView() {
        return lv;
    }
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru