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

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

Войти
Регистрация
Восстановить пароль
 
toxic_wower
0 / 0 / 0
Регистрация: 23.04.2014
Сообщений: 12
#1

ListView и Диалог - Программирование Android

23.04.2014, 10:38. Просмотров 1170. Ответов 7
Метки нет (Все метки)

Привет.
Редактирование TextView при помощи диалога.
Javascript
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
public class MainActivity extends Activity {
 
    final String LOG = "myLogs";
 
    final int DIALOG_EDIT = 1;
 
    final Context context = this;
 
    TextView text1;
 
    /** Called when the activity is first created. */
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main2);
 
        text1 = (TextView) findViewById(R.id.text1);
    }
 
    public void onclick(View v) {
        // вызываем диалог
        showDialog(DIALOG_EDIT);
 
    }
 
    protected Dialog onCreateDialog(int id) {
        if (id == DIALOG_EDIT) {
            AlertDialog.Builder adb = new AlertDialog.Builder(this);
 
            // !
            // get prompts.xml view
            LayoutInflater li = LayoutInflater.from(context);
            View promptsView = li.inflate(R.layout.promts, null);
 
            AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
                    context);
 
            // set prompts.xml to alertdialog builder
            alertDialogBuilder.setView(promptsView);
 
            final EditText userInput = (EditText) promptsView
                    .findViewById(R.id.editTextDialogUserInput);
 
            // set dialog message
            alertDialogBuilder
                    .setCancelable(false)
                    .setPositiveButton("OK",
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,
                                        int id) {
                                    // get user input and set it to result
                                    // edit text
                                    text1.setText(userInput.getText());
                                }
                            })
                    .setNegativeButton("Cancel",
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,
                                        int id) {
                                    dialog.cancel();
                                }
                            });
 
            // create alert dialog
            AlertDialog alertDialog = alertDialogBuilder.create();
 
            // show it
            alertDialog.show();
 
        }
 
        // !
 
        return super.onCreateDialog(id);
    }
}
В чем вопрос. Можно ли сделать подобное только с ListView?

У меня вроде получалось, но кривовато, + данные которые редактировались я выводил в логи, по-другому сделать не могу.

Я так понимаю метод который выводит данные в TextView на экран вот этот:
Javascript
1
text1.setText(userInput.getText());
А как выглядит метод который выводит данные в ListView?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.04.2014, 10:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос ListView и Диалог (Программирование Android):

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

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

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

Данные из SQlite в ListView, обработка события ListView - Программирование Android
Ребят, есть БД, ListView. Надо при нажатии на строчку ListView вытащить данные int из БД. mList.setOnItemClickListener(new...

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

Копирование данных из 1 listView во 2 listView - Программирование Android
Нужно что бы при нажатии на один элемент в первом ListView он копировался во второй ListView причём многократно.Но я использую...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
23.04.2014, 10:45 #2
назначить OnItemClickListener, оттуда мы получим позицию элемента, меняем в исходном объекте значение (или в базе, если у вас CursorAdapter), вызываем у адаптера .notifydatasetchange();, список перерисуется
1
toxic_wower
0 / 0 / 0
Регистрация: 23.04.2014
Сообщений: 12
23.04.2014, 12:23  [ТС] #3
Вот что у меня получилось.

Javascript
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
public class MainActivity extends Activity {
 
    final String LOG_TAG = "myLogs";
 
    // элементы списка которые будут в него внесены
    String[] data = { "Click", "Click", "Ckick" };
 
    int DIALOG_TIME = 1;
    int myHour = 12;
    int myMinute = 00;
    ListView lvMain;
 
    /** Called when the activity is first created. */
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        // Связываемся с ListView
        ListView lvMain = (ListView) findViewById(R.id.lvMain);
 
        // создаем адаптер
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, data);
 
        // устанавливаем адаптер списку
        lvMain.setAdapter(adapter);
 
        // public void onclick(View view) {
        // showDialog(DIALOG_TIME);
        lvMain.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                Log.d(LOG_TAG, "itemClick: position = " + position + ", id = "
                        + id);
                showDialog(DIALOG_TIME);
            }
        });
 
        lvMain.setOnItemSelectedListener(new OnItemSelectedListener() {
            public void onItemSelected(AdapterView<?> parent, View view,
                    int position, long id) {
                Log.d(LOG_TAG, "itemSelect: position = " + position + ", id = "
                        + id);
            }
 
            public void onNothingSelected(AdapterView<?> parent) {
                Log.d(LOG_TAG, "itemSelect: nothing");
            }
        });
 
    }
 
    protected Dialog onCreateDialog(int id) {
        if (id == DIALOG_TIME) {
            TimePickerDialog tpd = new TimePickerDialog(this, myCallBack,
                    myHour, myMinute, true);
            return tpd;
        }
        return super.onCreateDialog(id);
    }
 
    OnTimeSetListener myCallBack = new OnTimeSetListener() {
        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
            myHour = hourOfDay;
            myMinute = minute;
            Log.d(LOG_TAG, "Time is " + myHour + " hours " + myMinute
                    + " minutes");
            // lvMain.setText("Time is " + myHour + " hours " + myMinute
            // + " minutes");
        }
 
    };
}
Вроде бы все нажимается, все хорошо.
Вот логи:

04-23 04:04:02.590: D/myLogs(2211): itemClick: position = 2, id = 2
04-23 04:04:06.820: D/myLogs(2211): Time is 12 hours 1 minutes
04-23 04:04:07.000: D/myLogs(2211): Time is 12 hours 1 minutes
04-23 04:04:12.580: D/myLogs(2211): itemClick: position = 0, id = 0
04-23 04:04:16.280: D/myLogs(2211): Time is 8 hours 1 minutes
04-23 04:04:16.360: D/myLogs(2211): Time is 8 hours 1 minutes

Но т.к я новичек, то не особо понимаю, что за исходный объект) Можно этот пример сделать "одноразовым"? Т.е. не заносить в базу данных, а просто поменять значения, чтобы они отобразились в ListView. (взял готовый кусок кода из примера с TimePickerDialog, но думаю это не так важно, смысл остается тот же.)

Вот пример с TextView:
0
Миниатюры
ListView и Диалог   ListView и Диалог  
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
23.04.2014, 12:26 #4
Цитата Сообщение от toxic_wower Посмотреть сообщение
Можно этот пример сделать "одноразовым"? Т.е. не заносить в базу данных, а просто поменять значения, чтобы они отобразились в ListView.
Если вы просто смените текст в итеме, то когда проскроллите его за пределы экрана, а потом вернетесь он будет старым.

каким адаптером пользуетесь?
0
toxic_wower
0 / 0 / 0
Регистрация: 23.04.2014
Сообщений: 12
23.04.2014, 13:25  [ТС] #5
Цитата Сообщение от NiRamz
Если вы просто смените текст в итеме, то когда проскроллите его за пределы экрана, а потом вернетесь он будет старым.
Я просто хочу попробовать сделать именно так как объяснил, а потом уже отталкиваясь от этого пробовать с БД.

каким адаптером пользуетесь?
ArrayAdapter. Или я что-то не то говорю?)
0
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
23.04.2014, 13:48 #6
Цитата Сообщение от toxic_wower Посмотреть сообщение
ArrayAdapter. Или я что-то не то говорю?
в него вы передаете массив данных, вот в нем нужный элемент и модифицируете, далее вызываете нотификацию
1
toxic_wower
0 / 0 / 0
Регистрация: 23.04.2014
Сообщений: 12
24.04.2014, 09:51  [ТС] #7
Цитата Сообщение от NiRamz
в него вы передаете массив данных, вот в нем нужный элемент и модифицируете, далее вызываете нотификацию
Попробую сделать как вы сказали, напишу что получилось.
0
toxic_wower
0 / 0 / 0
Регистрация: 23.04.2014
Сообщений: 12
24.04.2014, 12:55  [ТС] #8
В общем вот что у меня получилось.

Класс по работе с БД:
Javascript
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
public class DB {
 
    private static final String DB_NAME = "mydb";
    private static final int DB_VERSION = 1;
    private static final String DB_TABLE = "mytab";
 
    public static final String COLUMN_ID = "_id";
    public static final String COLUMN_IMG = "img";
    public static final String COLUMN_TXT = "txt";
 
    private static final String DB_CREATE = "create table " + DB_TABLE + "("
            + COLUMN_ID + " integer primary key autoincrement, " + COLUMN_IMG
            + " integer, " + COLUMN_TXT + " text" + ", " + ");";
 
    private final Context mCtx;
 
    private DBHelper mDBHelper;
    private SQLiteDatabase mDB;
 
    public DB(Context ctx) {
        mCtx = ctx;
    }
 
    // открыть подключение
    public void open() {
        mDBHelper = new DBHelper(mCtx, DB_NAME, null, DB_VERSION);
        mDB = mDBHelper.getWritableDatabase();
    }
 
    // закрыть подключение
    public void close() {
        if (mDBHelper != null)
            mDBHelper.close();
    }
 
    // получить все данные из таблицы DB_TABLE
    public Cursor getAllData() {
        return mDB.query(DB_TABLE, null, null, null, null, null, null);
    }
 
    // добавить запись в DB_TABLE
    public void addRec(String txt, int img) {
        ContentValues cv = new ContentValues();
        cv.put(COLUMN_TXT, txt);
        cv.put(COLUMN_IMG, img);
        mDB.insert(DB_TABLE, null, cv);
    }
 
    // удалить запись из DB_TABLE
    public void delRec(long id) {
        mDB.delete(DB_TABLE, COLUMN_ID + " = " + id, null);
    }
 
    // класс по созданию и управлению БД
    private class DBHelper extends SQLiteOpenHelper {
 
        public DBHelper(Context context, String name, CursorFactory factory,
                int version) {
            super(context, name, factory, version);
        }
 
        // создаем и заполняем БД
        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(DB_CREATE);
 
            ContentValues cv = new ContentValues();
            for (int i = 1; i < 5; i++) {
                cv.put(COLUMN_TXT, "sometext " + i);
                cv.put(COLUMN_IMG, R.drawable.ic_launcher);
                db.insert(DB_TABLE, null, cv);
            }
        }
 
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        }
    }
 
}
класс MainActivity:
Javascript
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
public class MainActivity extends Activity {
 
    final Context context = this;
    final int DIALOG_EDIT = 1;
    private static final int CM_DELETE_ID = 1;
    ListView lvData;
    DB db;
    SimpleCursorAdapter scAdapter;
    Cursor cursor;
    TextView text1;
 
    /** Called when the activity is first created. */
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        text1 = (TextView) findViewById(R.id.text1);
 
        // открываем подключение к БД
        db = new DB(this);
        db.open();
 
        // получаем курсор
        cursor = db.getAllData();
        startManagingCursor(cursor);
 
        // формируем столбцы сопоставления
        String[] from = new String[] { DB.COLUMN_IMG, DB.COLUMN_TXT };
        int[] to = new int[] { R.id.ivImg, R.id.tvText };
 
        // создааем адаптер и настраиваем список
        scAdapter = new SimpleCursorAdapter(this, R.layout.item, cursor, from,
                to);
        lvData = (ListView) findViewById(R.id.lvData);
        lvData.setAdapter(scAdapter);
 
        // добавляем контекстное меню к списку
        registerForContextMenu(lvData);
    }
 
    // обработка нажатия кнопки
    public void onButtonClick(View view) {
        showDialog(DIALOG_EDIT);
        // обновляем курсор
        cursor.requery();
    }
 
    protected Dialog onCreateDialog(int id) {
        if (id == DIALOG_EDIT) {
            AlertDialog.Builder adb = new AlertDialog.Builder(this);
 
            // !
            // get prompts.xml view
            LayoutInflater li = LayoutInflater.from(context);
            View promptsView = li.inflate(R.layout.promts, null);
 
            AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
                    context);
 
            // set prompts.xml to alertdialog builder
            alertDialogBuilder.setView(promptsView);
 
            final EditText userInput = (EditText) promptsView
                    .findViewById(R.id.editTextDialogUserInput);
 
            // set dialog message
            alertDialogBuilder
                    .setCancelable(false)
                    .setPositiveButton("OK",
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,
                                        int id) {
                                    EditText editTextDialogUserInput = userInput;
                                    db.addRec(editTextDialogUserInput.getText()
                                            .toString(), R.drawable.ic_launcher);
                                    editTextDialogUserInput.setText("");
                                    cursor.requery();
 
                                }
                            })
                    .setNegativeButton("Cancel",
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,
                                        int id) {
                                    dialog.cancel();
                                }
                            });
 
            // create alert dialog
            AlertDialog alertDialog = alertDialogBuilder.create();
 
            // show it
            alertDialog.show();
 
        }
 
        // !
 
        return super.onCreateDialog(id);
    }
 
    public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        menu.add(0, CM_DELETE_ID, 0, R.string.delete_record);
    }
 
    public boolean onContextItemSelected(MenuItem item) {
        if (item.getItemId() == CM_DELETE_ID) {
            // получаем из пункта контекстного меню данные по пункту списка
            AdapterContextMenuInfo acmi = (AdapterContextMenuInfo) item
                    .getMenuInfo();
            // извлекаем id записи и удаляем соответствующую запись в БД
            db.delRec(acmi.id);
            // обновляем курсор
            cursor.requery();
            return true;
        }
        return super.onContextItemSelected(item);
    }
 
    protected void onDestroy() {
        super.onDestroy();
        // закрываем подключение при выходе
        db.close();
    }
 
}
0
Миниатюры
ListView и Диалог   ListView и Диалог   ListView и Диалог  

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.04.2014, 12:55
Привет! Вот еще темы с ответами:

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

Использование ListView в ListView - Программирование Android
Всем привет. Можете показать как использовать ListView в ListView, с заполнением как внешнего ListView, так и внутреннего причем с...

Не работает диалог - Программирование Android
Добрый день! Подскажите как быть. Имеется код создания диалогового окна AlertDialog, с анонимным классом. Android Studio ругается на...

R-независимый диалог - Программирование Android
После Делфи привык делать &quot;идеально отлаженые компоненты&quot; и ими пользоваться во всех своих проектах. Написал свой диалог Yes-No для...


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

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

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