Урок 57. GridView и его атрибуты

Обсуждение уроков
Nurzhan
Сообщения: 1
Зарегистрирован: 09 мар 2014, 09:45

Re: Урок 57. GridView и его атрибуты

Сообщение Nurzhan » 09 мар 2014, 09:48

Как реализовать GridView внутри фрагмента?

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 57. GridView и его атрибуты

Сообщение rezak90 » 09 мар 2014, 13:20

Nurzhan писал(а):Как реализовать GridView внутри фрагмента?
так же само как и в активити)) отличий то нету
R.id.team
Политика на форуме запрещена

Аватара пользователя
kifir
Сообщения: 11
Зарегистрирован: 06 окт 2013, 19:03

Re: Урок 57. GridView и его атрибуты

Сообщение kifir » 13 июн 2014, 18:01

Здравствуйте! Пожалуйста, подскажите мне как вывести данные из SQL базы в GridView? Чтоб было понятней, мне надо просто таблица калорийности, несколько столбцов и много строк. Нашел пример с использованием ListView, но он мне не подходит.
Код БДХелпера

Код: Выделить всё

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import android.content.Context;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class ExternalDbOpenHelper extends SQLiteOpenHelper {

	//Путь к папке с базами на устройстве
	public static String DB_PATH;
	//Имя файла с базой
	public static String DB_NAME;
	public SQLiteDatabase database;
	public final Context context;

	public SQLiteDatabase getDb() {
		return database;
	}

	public ExternalDbOpenHelper(Context context, String databaseName) {
		super(context, databaseName, null, 1);
		this.context = context;
		//Составим полный путь к базам для вашего приложения
		String packageName = context.getPackageName();
		DB_PATH = String.format("//data//data//%s//databases//", packageName);
		DB_NAME = databaseName;
		openDataBase();
	}

	//Создаст базу, если она не создана
	public void createDataBase() {
		boolean dbExist = checkDataBase();
		if (!dbExist) {
			this.getReadableDatabase();
			try {
				copyDataBase();
			} catch (IOException e) {
				Log.e(this.getClass().toString(), "Copying error");
				throw new Error("Error copying database!");
			}
		} else {
			Log.i(this.getClass().toString(), "Database already exists");
		}
	}
	//Проверка существования базы данных
	private boolean checkDataBase() {
		SQLiteDatabase checkDb = null;
		try {
			String path = DB_PATH + DB_NAME;
			checkDb = SQLiteDatabase.openDatabase(path, null,
					SQLiteDatabase.OPEN_READONLY);
		} catch (SQLException e) {
			Log.e(this.getClass().toString(), "Error while checking db");
		}
		//Андроид не любит утечки ресурсов, все должно закрываться
		if (checkDb != null) {
			checkDb.close();
		}
		return checkDb != null;
	}
	//Метод копирования базы
	private void copyDataBase() throws IOException {
		// Открываем поток для чтения из уже созданной нами БД
		//источник в assets
		InputStream externalDbStream = context.getAssets().open(DB_NAME);

		// Путь к уже созданной пустой базе в андроиде
		String outFileName = DB_PATH + DB_NAME;

		// Теперь создадим поток для записи в эту БД побайтно
		OutputStream localDbStream = new FileOutputStream(outFileName);

		// Собственно, копирование
		byte[] buffer = new byte[1024];
		int bytesRead;
		while ((bytesRead = externalDbStream.read(buffer)) > 0) {
			localDbStream.write(buffer, 0, bytesRead);
		}
		// Мы будем хорошими и закроем потоки
		localDbStream.close();
		externalDbStream.close();

	}

	public SQLiteDatabase openDataBase() throws SQLException {
		String path = DB_PATH + DB_NAME;
		if (database == null) {
			createDataBase();
			database = SQLiteDatabase.openDatabase(path, null,
				SQLiteDatabase.OPEN_READWRITE);
		}
		return database;
	}
	@Override
	public synchronized void close() {
		if (database != null) {
			database.close();
		}
		super.close();
	}
	@Override
	public void onCreate(SQLiteDatabase db) {}
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}
}
Код Активити

Код: Выделить всё

import java.util.ArrayList;

import android.app.ListActivity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import diplom.proba2.bdhelper.ExternalDbOpenHelper;

public class ActivityTable extends ListActivity {

	private static final String DB_NAME = "mybd.sqlite3";
    //Хорошей практикой является задание имен полей БД константами
	private static final String TABLE_NAME = "kalor";
	private static final String PROD_ID = "_id";
	private static final String PROD_NAME = "name";
	private static final String PROD_BEL = "bel";
	

	private SQLiteDatabase database;
	private ListView listView;
	private ArrayList kalor;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.ras_table);

        //Наш ключевой хелпер
        ExternalDbOpenHelper dbOpenHelper = new ExternalDbOpenHelper(this, DB_NAME);
        database = dbOpenHelper.openDataBase();
        //Все, база открыта!
        fillFreinds();
        setUpList();
    }

    private void setUpList() {
		//Испльзуем стандартный адаптер и layout элемента для краткости
		setListAdapter(new ArrayAdapter<String>(this,
						android.R.layout.simple_list_item_1, kalor));
		listView = getListView();

}

//Извлечение элементов из базы данных
private void fillFreinds() {
	kalor = new ArrayList<String>();
	Cursor prodCursor = database.query(TABLE_NAME, new String[] {PROD_ID, PROD_NAME},
															null, null,null,null, PROD_NAME);
	prodCursor.moveToFirst();
		if(!prodCursor.isAfterLast()) {
			do {
				String name = prodCursor.getString(1);
				kalor.add(name);				
			} while (prodCursor.moveToNext());
		}
		prodCursor.close();
	}
}
Ну и лейаут

Код: Выделить всё

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello"
    />
    
 <ListView 
 	android:id="@android:id/list"
 	android:layout_width="fill_parent"
 	android:layout_height="fill_parent">
 	</ListView> 	
 
</LinearLayout>
Извиняюсь, если не в тему :roll:

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 57. GridView и его атрибуты

Сообщение Foenix » 13 июн 2014, 20:23

гридвью вообще редко используется. Листвью гораздо удобнее для этих целей.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
kifir
Сообщения: 11
Зарегистрирован: 06 окт 2013, 19:03

Re: Урок 57. GridView и его атрибуты

Сообщение kifir » 14 июн 2014, 00:20

Foenix писал(а):гридвью вообще редко используется. Листвью гораздо удобнее для этих целей.
Ну на сколько я понял, с листвью не получится таблицу сделать, а она то мне и нужна(

wolland
Сообщения: 1
Зарегистрирован: 16 сен 2014, 17:23

Re: Урок 57. GridView и его атрибуты

Сообщение wolland » 16 сен 2014, 17:30

ребят, вопрос может не туда, но про GridLayout ничего здесь не нашол.
Вопрос в следующем, как программно менять ширину/высоту кнопок в Gridlayout'e.

gridLayoutsParams().width = 10; - выдает ошибку

Sanek517s
Сообщения: 33
Зарегистрирован: 03 ноя 2014, 19:39

Re: Урок 57. GridView и его атрибуты

Сообщение Sanek517s » 07 мар 2015, 12:13

Всем привет. Подскажите, пожалуйста, как реализовать переход к следующему элементу в GridView. Необходимо при нажатии на один элемент, закрасить его и следующий элемент.

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Урок 57. GridView и его атрибуты

Сообщение doter.ua » 07 мар 2015, 14:47

Sanek517s писал(а):Всем привет. Подскажите, пожалуйста, как реализовать переход к следующему элементу в GridView. Необходимо при нажатии на один элемент, закрасить его и следующий элемент.
get item at position ( position + 1 ) под айтемом в идеале подразумевается кастомный класс-контейнер с одним из полей int color для цвета.
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

Sanek517s
Сообщения: 33
Зарегистрирован: 03 ноя 2014, 19:39

Re: Урок 57. GridView и его атрибуты

Сообщение Sanek517s » 11 мар 2015, 19:03

doter.ua писал(а):
Sanek517s писал(а):Всем привет. Подскажите, пожалуйста, как реализовать переход к следующему элементу в GridView. Необходимо при нажатии на один элемент, закрасить его и следующий элемент.
get item at position ( position + 1 ) под айтемом в идеале подразумевается кастомный класс-контейнер с одним из полей int color для цвета.
Можно пример на коде? Я использовал get item at position но я смог только получить другое значение. Я все так же не могу взаимодействовать с другими элементами grid при нажатии на один из его элементов

Sanek517s
Сообщения: 33
Зарегистрирован: 03 ноя 2014, 19:39

Re: Урок 57. GridView и его атрибуты

Сообщение Sanek517s » 22 мар 2015, 14:28

kifir писал(а):Здравствуйте! А можно ли задать фиксированную ширину для первой ячейки одну, а для остальных другую?
Насколько мне известно - нет.

Кто знает, как перерисовать (обновить) GridView?

Checkaboy
Сообщения: 1
Зарегистрирован: 30 дек 2016, 23:52

Re: Урок 57. GridView и его атрибуты

Сообщение Checkaboy » 31 дек 2016, 00:10

Хотел спросить, столкнулся с такой проблемой, есть грид, по нажатию на любой итем вызывается диалоговое окно для ввода значений (которое внесется в эту часть грида), после ввода значений я переприменяю адаптер, и как не странно, он скидывает его в самое начало, это в принципе логично, так как он его перерисовует, но может кто знает, есть ли какой то метод что бы он не скидывал меня в начало ? Grid.setSelection(position); пробовал таким способом, запоминаю какой итем последний виден на экране и потом просто заставляю сместится к нему, но все равно не всегда корректно работает. За помощь буду благодарен, если нужны какие то части кода, пишите. А если я где то не дочитал и этот вопрос расскрывался, прошу простить.

Droidoc
Сообщения: 7
Зарегистрирован: 23 дек 2016, 07:52

Re: Урок 57. GridView и его атрибуты

Сообщение Droidoc » 26 янв 2017, 21:17

Как получить доступ к элементам gridview из кода? - например получить количество элементов или какой то конкретный элемент , пробовал использовать getChildCount() , но вылетает Resource not found

rus47
Сообщения: 4
Зарегистрирован: 09 июн 2016, 21:56

Re: Урок 57. GridView и его атрибуты

Сообщение rus47 » 16 авг 2018, 11:42

Всем привет!Не подскажите как при касании ячейки, сменить текст внутри этой ячейке?

Ответить