Страница 2 из 11

Re: Урок 33. Хранение данных. Preferences.

Добавлено: 15 авг 2012, 10:48
math64

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

base = base.substring(1,base.length()-1);
Stings[] mas = base.split(", "); // возможно, нужно "\\, "

Re: Урок 33. Хранение данных. Preferences.

Добавлено: 15 авг 2012, 11:41
math64
А лучше:

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

ed.putStringSet(Save_Arrays,new LinkedHashSet<String>(Arrays.asList(mas)));
Set<String> set = sPref.getStringSet(Save_Arrays, null);
String[] mas = set == null ? new String[0] : set.toArray(new String[set.size()]);

Re: Урок 33. Хранение данных. Preferences.

Добавлено: 15 авг 2012, 18:41
3Gern
math64
сделал добавив дополнительные переменные.

Re: Урок 33. Хранение данных. Preferences.

Добавлено: 15 авг 2012, 19:34
math64
Как - через split() или через putStringSet() ? Если у тебя массив строк, то как у меня, больше ничего не нужно.
Если массив другого типа - нужна доп. конвертация String в этот тип.

Re: Урок 33. Хранение данных. Preferences.

Добавлено: 17 авг 2012, 15:27
RightBuilder
"Теперь если мы посмотрим исходники метода getPreferences, то видим следующее:", где посмотреть эти исходники? и исходники всего класса Activity например?

Re: Урок 33. Хранение данных. Preferences.

Добавлено: 17 авг 2012, 18:47
math64
RightBuilder писал(а):"Теперь если мы посмотрим исходники метода getPreferences, то видим следующее:", где посмотреть эти исходники? и исходники всего класса Activity например?
Исходники есть на четрвёрку (Ice Cream). Скачивай оттуда же, откуда и SDK - c помощью Android SDK Manager.
Исходники ресурсов есть в каталоге andriod-sdk/platforms/android-N/data/res для всех платформ.

Re: Урок 33. Хранение данных. Preferences.

Добавлено: 17 авг 2012, 21:05
RightBuilder
по этому пути xml-ки лежат, нашёл тут AndroidSDK\sources\android-14\android
Спасибо

Re: Урок 33. Хранение данных. Preferences.

Добавлено: 04 сен 2012, 21:31
caHek2x
добрый день, помогите разобраться что делаю не правильно... все уроки получаются всё работает но в списке приложений все приложения называются MainActivity где я что ввожу не так ... ?
Изображение
Изображение

Re: Урок 33. Хранение данных. Preferences.

Добавлено: 04 сен 2012, 21:54
rezak90
саНек2х имя приложения меняется в манифесте:
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
в android:label="9I_KPEBEDKO"

Re: Урок 33. Хранение данных. Preferences.

Добавлено: 05 сен 2012, 01:33
caHek2x
rezak90 писал(а):саНек2х имя приложения меняется в манифесте:
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
в android:label="9I_KPEBEDKO"
Проблема в том что имя в манифесте норм ...
тоесть там android:label="@string/app_name"
а если зайти в res/values/strings.xml то увидем <string name="app_name">SimpleSQLite</string>
почему тогда в списке приложений название главного активити стоит а не SimpleSQLite ... ???
а да и что самое интерестное что в менеджере приложений с названиями всё ок ...
Изображение

Re: Урок 33. Хранение данных. Preferences.

Добавлено: 05 сен 2012, 07:20
math64
попробуй добавить android:label="@string/app_name" в объявление MainActivity:

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

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
  <activity
    android:name=".MainActivity"
    android:label="@string/app_name" >
    <intent-filter>
      <action android:name="android.intent.action.MAIN"/>
      <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
  </activity>
</application>

Re: Урок 33. Хранение данных. Preferences.

Добавлено: 05 сен 2012, 08:20
AndreyI
Все правильно, в пределах одного приложения может быть несколько запускаемых Activity с фильтром
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>

поэтому в лаунчере отображаются не имя приложения, а имена этих Activity, если для них не указан android:label в манифесте, то в качестве имени используется имя класса.

Re: Урок 33. Хранение данных. Preferences.

Добавлено: 05 сен 2012, 13:45
caHek2x
AndreyI писал(а):Все правильно, в пределах одного приложения может быть несколько запускаемых Activity с фильтром
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>

поэтому в лаунчере отображаются не имя приложения, а имена этих Activity, если для них не указан android:label в манифесте, то в качестве имени используется имя класса.
тоесть если у меня 3 активити с фильтром в одном приложении у меня эти все три активити в списке приложений появятся ???

Re: Урок 33. Хранение данных. Preferences.

Добавлено: 05 сен 2012, 13:49
caHek2x
math64 писал(а):попробуй добавить android:label="@string/app_name" в объявление MainActivity:
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
.........
спасибо так изменилось название в списке приложений ...

Re: Урок 33. Хранение данных. Preferences.

Добавлено: 05 сен 2012, 14:47
AndreyI
caHek2x писал(а): тоесть если у меня 3 активити с фильтром в одном приложении у меня эти все три активити в списке приложений появятся ???
Все активити с фильтром
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
будут отображаться в лаунчере, даже если их будет 100500 в приложении.


ЗЫ В АDT 20 при создании активити через мастер New "Android Activity" (вещь вроде удобная) автоматом проставлялся этот фильтр в манифест, приходилось удалять ручками. В ADT 21 эту багу поправили, теперь при создании активити добавили специальную опцию для этого.

Re: Урок 33. Хранение данных. Preferences.

Добавлено: 10 сен 2012, 12:37
Roman
AndreyI писал(а):
caHek2x писал(а): В ADT 21 эту багу поправили, теперь при создании активити добавили специальную опцию для этого.
А откуда вы скачивали 21 версию?
Последняя версия ADT 20.0.3 (August 2012)
Да и я бы на вашем месте подумал перед тем как заменять строку

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

android:label="@string/title_activity_main" >
на

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

android:label="@string/app_name"
в activity Манифеста. Как уже тут говорили можно вывести несколько активити вашего приложения в список, чтобы уменьшить количество кликов для юзера к нужному разделу вашего приложения. Лучше просто в стрингс заменить значение title_activity_main, оно у вас сейчас просто MainActivity

Re: Урок 33. Хранение данных. Preferences.

Добавлено: 10 сен 2012, 13:05
AndreyI
Roman писал(а): А откуда вы скачивали 21 версию?
Последняя версия ADT 20.0.3 (August 2012)
Она находится на стадии тестирования, здесь подробно описано как скачивать для предварительного просмотра ADT и SDK и как сделать откат на релизовые версии в случае чего.
http://tools.android.com/preview-channel

Re: Урок 33. Хранение данных. Preferences.

Добавлено: 03 окт 2012, 20:53
Ivan
Доброе время суток!
Подскажите как реализовать сохранность UI?
Поясняю:
К примеру есть кнопка, по нажатию на которую добавляется поле ввода на экран.
как сделать что бы поле не осчезало во время onPause(), onDestroy() и т.д.

есть одна идея но она кажется мне глупой, по-этому не спешу реализовывать ее в своем приложении)))

Re: Урок 33. Хранение данных. Preferences.

Добавлено: 03 окт 2012, 21:24
rezak90
1) Если поле одно (а не куча их), то можно изначально его разместить и сделать invisible, и потом при нажатии на кнопку делать его visible. В Preferences сохранять его состояние и при загрузки активити заново проверять состояние этого поля, если true то показывать его;
2) Сделать создание поля динамическим. Нажали на кнопку - создали EditText(или что там у вас) и добавили его к лейауту. Потом опять таки хранить его состояние в Preferences.

Re: Урок 33. Хранение данных. Preferences.

Добавлено: 04 окт 2012, 10:41
Ivan
rezak90 писал(а):1) Если поле одно (а не куча их), то можно изначально его разместить и сделать invisible, и потом при нажатии на кнопку делать его visible. В Preferences сохранять его состояние и при загрузки активити заново проверять состояние этого поля, если true то показывать его;
2) Сделать создание поля динамическим. Нажали на кнопку - создали EditText(или что там у вас) и добавили его к лейауту. Потом опять таки хранить его состояние в Preferences.
Спасибо за оперативность!)
Первый пункт сразу отпадает, а вот со вторым, если можно, поподробней.

Накидал тут тестовую прогу, но не работает.
В коде выделен предположительно нерабочий фрагмент "!!!!!" (я ее не дебажил).

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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LLmain"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="addButton" />

</LinearLayout>

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

package com.example.aaaaaatestsave;

import java.util.concurrent.Semaphore;

import android.app.Activity;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {
	Button addBtn;
	Button someBtn;
	LinearLayout LLmain;
	String btnName;
	int btnCount = 0;
	SharedPreferences sPref;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        LLmain = (LinearLayout) findViewById(R.id.LLmain);
        addBtn = (Button) findViewById(R.id.button1);
        addBtn.setOnClickListener(this);
        
    }
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        btnCount = savedInstanceState.getInt("btnCount");
    }
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt("btnCount", btnCount);
    }
    public void onPause(){
    	super.onPause();
    	saveState();
    }
    public void onResume(){
    	super.onResume();
        if (btnCount != 0) loadState();
    }
    
    void saveState() {
        sPref = getPreferences(MODE_PRIVATE);
        Editor ed = sPref.edit();
        for (int i = 1; i<btnCount; i++){
            ed.putInt("Button" + i, i);
        }
        ed.commit();
      }
      
      void loadState() {
        sPref = getPreferences(MODE_PRIVATE);
        for (int i = 0; i<btnCount; i++){
        	someBtn = (Button) findViewById(i); // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        	LLmain.addView(someBtn);
        }
        Toast.makeText(this, "Text loaded", Toast.LENGTH_SHORT).show();
      }
    private void addSomeButton(){
    	someBtn = new Button(this);
    	someBtn.setText("Button" + ++btnCount);
    	someBtn.setId(btnCount);
    	btnName = String.valueOf(someBtn.getText());
    	LLmain.addView(someBtn);
    }
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.button1:
			addSomeButton();
			break;
		}
		
	}
}
так вы имели ввиду сохранять состояние, или я написал "говнокод" :D