Персонализирано предпочитание с проблем с радио бутона

Планирам да създам стартиране на приложението с начален екран зависи от предпочитанията на потребителя (крайна цел, все още не добавям слушател onclick към бутоните), започвам стъпка по стъпка, за да постигна това и за първи път използвам радио бутони в предпочитанията,

когато стартирам приложение и натисна бутона за предпочитания в менюто с опции, той принуди затваряне, както е показано по-долу.

Знам, че може да се направи чрез listpreference в preference.xml в xml папка, но бих искал да го направя в оформлението, ако това е възможно.

всяка помощ ще бъде оценена, благодаря

Splash.java

 public class Splash extends Activity {
MediaPlayer ourSong;
@Override
protected void onCreate(Bundle savedInstanceState) {
    this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.splash);

     ourSong = MediaPlayer.create(Splash.this, R.raw.splashsound);          
        ourSong.start();            
        Thread timer = new Thread(){
            public void run(){
                try{
                    sleep(2000); 
                    }
                  catch (InterruptedException e){
                    e.printStackTrace(); 
                    }
                  finally{
                      Intent intent = new Intent(Splash.this, MainActivity.class);                                     
                        startActivity(intent); 
                        }
                } 
            };                                                                         
             timer.start();
             }      
    @Override
    protected void onPause() {
                // TODO Auto-generated method stub
        super.onPause();
        ourSong.release();
        finish();
              } 
           }

MainActivity.java

 public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
}
@Override
public boolean onCreateOptionsMenu(android.view.Menu menu) {

MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.cool_menu, menu);

getLayoutInflater().setFactory(new Factory() {
public View onCreateView(String name, Context context,AttributeSet attrs) {

if (name .equalsIgnoreCase("com.android.internal.view.menu.IconMenuItemView")) {
try {
LayoutInflater li = LayoutInflater.from(context);
final View view = li.createView(name, null, attrs);

new Handler().post(new Runnable() {
public void run() {

((TextView) view).setTextSize(25);  
((TextView) view).setTextColor(Color.RED); 
} 
}
);                                        
return view;
}
 catch (InflateException e) {        
 }
  catch (ClassNotFoundException e) {          
  }
}                                  
return null; 
}
}
);           
return super.onCreateOptionsMenu(menu);                                    
}   
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // TODO Auto-generated method stub
    switch (item.getItemId()) {
    case R.id.aboutUs:
        Intent i = new Intent("com.example.custompreference.ABOUT");
        startActivity(i);
    break;
    case R.id.preferences:
        Intent p = new Intent("com.example.custompreference.PREFS");
        startActivity(p);
    break;
    case R.id.exit:
        finish();
    break;
}
return false;
}
}

Prefs.java

  public class Prefs extends PreferenceActivity{    
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.pref);
    }
    }

pref.xml

<?xml version="1.0" encoding="utf-8"?>   
  <RadioGroup xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:orientation="vertical"
   android:gravity="center">    

<RadioButton android:id="@+id/radio_first"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="First"
    android:textColor="#B22222"
    android:onClick="onRadioButtonClicked"/>

<RadioButton android:id="@+id/radio_second"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Second"
    android:onClick="onRadioButtonClicked"/>
</RadioGroup>

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.custompreference"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="17" />
<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="com.example.custompreference.Splash"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity 
       android:name=".MainActivity" 
       android:label="@string/app_name" >           
       <intent-filter>
           <action android:name="com.example.custompreference.MAINACTIVITY" />                
           <category android:name="android.intent.category.DEFAULT" /> 
       </intent-filter>
   </activity>

    <activity 
       android:name=".AboutUs" 
       android:label="@string/app_name" >
       <intent-filter>
           <action android:name="com.example.custompreference.ABOUT" />                
           <category android:name="android.intent.category.DEFAULT" /> 
       </intent-filter>
   </activity>

    <activity 
       android:name=".Prefs" 
       android:label="@string/app_name" >           
       <intent-filter>
           <action android:name="com.example.custompreference.PREFS" />               
           <category android:name="android.intent.category.DEFAULT" /> 
       </intent-filter>
   </activity>
  </application>
  </manifest>

LOGCAT:

 java.lang.RuntimeException: Unable to start activity 
 ComponentInfo{com.example.custompreference/com.example.custompreference.Prefs}:
 java.lang.RuntimeException: Your content must have a ListView whose id attribute is  
  'android.R.id.list'
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
at android.app.ActivityThread.access$1500(ActivityThread.java:117)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3687)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
at dalvik.system.NativeStart.main(Native Method)
  Caused by: java.lang.RuntimeException: Your content must have a ListView whose id 
    attribute is 'android.R.id.list'
at android.app.ListActivity.onContentChanged(ListActivity.java:243)      
  atandroid.preference.PreferenceActivity.onContentChanged(PreferenceActivity.java:165)       
at om.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:219)
at android.app.Activity.setContentView(Activity.java:1660)
at com.example.custompreference.Prefs.onCreate(Prefs.java:11)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)

person Android Stack    schedule 14.07.2013    source източник


Отговори (1)


Ако погледнете през logcat, можете да видите, че имате нужда от ListView.

Но ти правиш всичко това погрешно. По принцип трябва да създадете файл Preferences.xml, в който да посочите кои джаджи за предпочитания искате във вашата PreferenceActivity, напр. RadioButtons и след това присвоете този xml файл на вашата PreferenceActivity по следния начин:

addPreferencesFromResource(R.xml.preferences);

Пример за Preferences.xml от този урок (файлът отива в папка res/xml, която трябва да създадете сами)

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
 <PreferenceCategory
   android:summary="Username and password information"
   android:title="Login information" >
  <EditTextPreference
     android:key="username"
     android:summary="Please enter your login username"
     android:title="Username" />
  <EditTextPreference
     android:key="password"
     android:summary="Enter your password"
     android:title="Password" />
 </PreferenceCategory>

 <PreferenceCategory
   android:summary="Username and password information"
   android:title="Settings" >
  <CheckBoxPreference
     android:key="checkBox"
     android:summary="On/Off"
     android:title="Keep me logged in" />

  <ListPreference
     android:entries="@array/listOptions"
     android:entryValues="@array/listValues"
     android:key="listpref"
     android:summary="List preference example"
     android:title="List preference" />
 </PreferenceCategory>
</PreferenceScreen>

Така че погледнете тук

Редактиране:

Можете да добавите персонализиран запис към ListView в Preferences.xml по следния начин:

    <Preference
        android:layout="@layout/your_custom_pref_entry"
        android:key="SOME_KEY_NAME" />

Не съм сигурен обаче как да се справя с избора на RadioButtons от там.

person Jakob    schedule 14.07.2013
comment
знам, че за създаване на preference.xml в xml папка и това предпочитание за списък ще даде бутоните за избор, но искам да го направя чрез оформление и да мога да го персонализирам, възможно ли е това, скъпа моя. благодаря - person Android Stack; 15.07.2013