настройки Android в основном макете

#android #preferences

#Android #настройки

Вопрос:

У меня проблема с настройками. Я создал этот простой проект: start.java:

 package example.ex;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class start extends Activity {
    Intent intent;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
    public void preferences (View view){
        intent = new Intent(getApplicationContext(), Preferences.class);
        startActivity(intent);      
    }
}
  

Preferences.java:

     package example.ex;

import android.os.Bundle;
import android.preference.PreferenceActivity;

public class Preferences extends PreferenceActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);
    }
}
  

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

Макет: main.xml:

 <?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"
    />
    <Button
     android:layout_height="wrap_content"
     android:layout_width="wrap_content"
     android:text="preferences"
     android:onClick="preferences" />
</LinearLayout>
  

preferenze.xml:

 <?xml version="1.0" encoding="utf-8"?>
<TableLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
>
    <TableRow>
        <TextView
                android:text="List Selection:"
                android:paddingRight="5px"
        />
        <TextView android:id="@ id/list"
        />
    </TableRow>
</TableLayout>
  

в значениях, которые я ставлю arrays.xml

 <?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="country">
        <item>U.S. (United States of America)</item>
        <item>Italia (Italy)</item>
    </string-array>
    <string-array name="codice_paese">
        <item>US</item>
        <item>IT</item>
    </string-array>
</resources>
  

Наконец, я создал preferences.xml (в папке xml в res) :

 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <PreferenceCategory android:title="Simple Preferences">
        <ListPreference android:key="list" android:title="Selection Dialog"
            android:summary="Click to pop up a list to choose from"
            android:entries="@array/country" android:entryValues="@array/codice_paese"
            android:dialogTitle="Choose a country" />
    </PreferenceCategory>
</PreferenceScreen>
  

затем: у меня есть main, а затем я перехожу на страницу настроек.

Я хотел бы перейти непосредственно к основным настройкам (вместо кнопки) и использовать одно действие

но я никак не могу этого сделать .. пожалуйста, у вас есть какие-либо предложения? Спасибо!

Ответ №1:

попробуйте что-то подобное, используя SharedPreferences и Spinner вместо

 package com.example.spinnerpref;

import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.AdapterView.OnItemSelectedListener;

public class SpinnerPref extends Activity
{
int countrypos;
public void onCreate(Bundle savedInstanceState)
    {
    super.onCreate(savedInstanceState);
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    countrypos = prefs.getInt("countrypos", 0);
    setContentView(R.layout.main);

    Spinner countryspinner = (Spinner) findViewById(R.id.country);
    ArrayAdapter<CharSequence> countryadapater = ArrayAdapter.createFromResource(
            this, R.array.country, android.R.layout.simple_spinner_item);
    countryadapater.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    countryspinner.setAdapter(countryadapater);
    countryspinner.setOnItemSelectedListener(new countrySelector());

    class countrySelector implements OnItemSelectedListener
    {
        public void onItemSelected(AdapterView<?> parent, View view, int pos, long id)
            {
            countrypos = pos;
            }
        public void onNothingSelected(AdapterView<?> parent) {}
    }

    PreferenceManager.getDefaultSharedPreferences(getApplicationContext())
        .edit().putInt("countrypos", countrypos).commit();
    }
}
  

что-то в этом роде должно быть более аккуратным для того, что вы делаете.

Комментарии:

1. обязательно обновите main.xml и strings.xml соответственно. я знаю, что мне было не очень хорошо с этим, но я не хотел тратить на это кучу времени из-за того, что вы, возможно, даже не увидите это / вам это больше не понадобится, поэтому дайте мне знать, если у вас возникнут вопросы по любому из этого, и я уточню.