1

Я ищу что-то похожее на настройки UI системного Android. Я хочу что-то вроде нескольких checkboxpreferences, switchpreferences, edittextpreferences при запуске приложения, а затем, когда пользователь выбирает один предпочтительный вариант, откройте фрагмент, но я просто не могу это понять.Android UI настроек

Я направил руководство Settings, но он настаивает на использовании заголовка предпочтений. При отображении заголовков маловероятно, что я столкнулся с отображением текстов, которые, в свою очередь, будут загружать фрагменты.

Например,

Мой заголовок предпочтения что-то вроде:

<preference-headers xmlns:android="http://schemas.android.com/apk/res/android" > 

    <!-- These settings headers are only used on tablets. --> 

    <header 
     android:fragment="${packageName}.${activityClass}$GeneralPreferenceFragment" 
     android:title="@string/pref_header_general" /> 
    <header 
     android:fragment="${packageName}.${activityClass}$NotificationPreferenceFragment" 
     android:title="@string/pref_header_notifications" /> 
    <header 
     android:fragment="${packageName}.${activityClass}$DataSyncPreferenceFragment" 
     android:title="@string/pref_header_data_sync" /> 

</preference-headers> 

и просто загружать фактические данные, я имею использовать его. Фактические данные будут иметь флажки и edittexts.

Было бы здорово, если бы кто-нибудь дал понять это. Было бы очень полезно, если бы я мог запустить фактические данные фрагмента при загрузке экрана. Лучше, если бы я мог контролировать, какой фрагмент вызывать и вызывать другие фрагменты, когда выбран фрагмент.

ответ

4

Чтобы создать пользовательские заголовки предпочтений с помощью переключателей и т. Д., Вам необходимо расширить функцию PreferenceActivity с заголовками, как описано в документах Android, а затем переопределить PreferenceActivity.setListAdapter, чтобы создать собственный адаптер списка, который создает пользовательские представления. Я сделал пастебин с кодом из фактической активности настроек Android, чтобы помочь вам. http://pastebin.com/RhSndGCQ

@Override 
public void onBuildHeaders(List<Header> headers) { 
    loadHeadersFromResource(R.xml.settings_headers, headers); 
    updateHeaderList(headers); 
} 

@Override 
public void setListAdapter(ListAdapter adapter) { 
    if (adapter == null) { 
     super.setListAdapter(null); 
    } else { 
     super.setListAdapter(new HeaderAdapter(this, getHeaders(), mAuthenticatorHelper)); 
    } 
} 

private static class HeaderAdapter extends ArrayAdapter<Header> { 
    static final int HEADER_TYPE_CATEGORY = 0; 
    static final int HEADER_TYPE_NORMAL = 1; 
    static final int HEADER_TYPE_SWITCH = 2; 
    private static final int HEADER_TYPE_COUNT = HEADER_TYPE_SWITCH + 1; 

    private final WifiEnabler mWifiEnabler; 
    private final BluetoothEnabler mBluetoothEnabler; 
    private final ProfileEnabler mProfileEnabler; 

    private AuthenticatorHelper mAuthHelper; 

    private static class HeaderViewHolder { 
     ImageView icon; 
     TextView title; 
     TextView summary; 
     Switch switch_; 
    } 

    private LayoutInflater mInflater; 

    static int getHeaderType(Header header) { 
     if (header.fragment == null && header.intent == null) { 
      return HEADER_TYPE_CATEGORY; 
     } else if (header.id == R.id.wifi_settings 
       || header.id == R.id.bluetooth_settings 
       || header.id == R.id.profiles_settings) { 
      return HEADER_TYPE_SWITCH; 
     } else { 
      return HEADER_TYPE_NORMAL; 
     } 
    } 

    @Override 
    public int getItemViewType(int position) { 
     Header header = getItem(position); 
     return getHeaderType(header); 
    } 

    @Override 
    public boolean areAllItemsEnabled() { 
     return false; // because of categories 
    } 

    @Override 
    public boolean isEnabled(int position) { 
     return getItemViewType(position) != HEADER_TYPE_CATEGORY; 
    } 

    @Override 
    public int getViewTypeCount() { 
     return HEADER_TYPE_COUNT; 
    } 

    @Override 
    public boolean hasStableIds() { 
     return true; 
    } 

    public HeaderAdapter(Context context, List<Header> objects, 
      AuthenticatorHelper authenticatorHelper) { 
     super(context, 0, objects); 

     mAuthHelper = authenticatorHelper; 
     mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     // Temp Switches provided as placeholder until the adapter replaces these with actual 
     // Switches inflated from their layouts. Must be done before adapter is set in super 
     mWifiEnabler = new WifiEnabler(context, new Switch(context)); 
     mBluetoothEnabler = new BluetoothEnabler(context, new Switch(context)); 
     mProfileEnabler = new ProfileEnabler(context, null, new Switch(context)); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     HeaderViewHolder holder; 
     Header header = getItem(position); 
     int headerType = getHeaderType(header); 
     View view = null; 

     if (convertView == null || headerType == HEADER_TYPE_SWITCH) { 
      holder = new HeaderViewHolder(); 
      switch (headerType) { 
       case HEADER_TYPE_CATEGORY: 
        view = new TextView(getContext(), null, 
          android.R.attr.listSeparatorTextViewStyle); 
        holder.title = (TextView) view; 
        break; 

       case HEADER_TYPE_SWITCH: 
        view = mInflater.inflate(R.layout.preference_header_switch_item, parent, 
          false); 
        holder.icon = (ImageView) view.findViewById(R.id.icon); 
        holder.title = (TextView) 
          view.findViewById(com.android.internal.R.id.title); 
        holder.summary = (TextView) 
          view.findViewById(com.android.internal.R.id.summary); 
        holder.switch_ = (Switch) view.findViewById(R.id.switchWidget); 
        break; 

       case HEADER_TYPE_NORMAL: 
        view = mInflater.inflate(
          R.layout.preference_header_item, parent, 
          false); 
        holder.icon = (ImageView) view.findViewById(R.id.icon); 
        holder.title = (TextView) 
          view.findViewById(com.android.internal.R.id.title); 
        holder.summary = (TextView) 
          view.findViewById(com.android.internal.R.id.summary); 
        break; 
      } 
      view.setTag(holder); 
     } else { 
      view = convertView; 
      holder = (HeaderViewHolder) view.getTag(); 
     } 

     // All view fields must be updated every time, because the view may be recycled 
     switch (headerType) { 
      case HEADER_TYPE_CATEGORY: 
       holder.title.setText(header.getTitle(getContext().getResources())); 
       break; 

      case HEADER_TYPE_SWITCH: 
       // Would need a different treatment if the main menu had more switches 
       if (header.id == R.id.wifi_settings) { 
        mWifiEnabler.setSwitch(holder.switch_); 
       } else if (header.id == R.id.bluetooth_settings) { 
        mBluetoothEnabler.setSwitch(holder.switch_); 
       } else if (header.id == R.id.profiles_settings) { 
        mProfileEnabler.setSwitch(holder.switch_); 
       } 
       // No break, fall through on purpose to update common fields 

       //$FALL-THROUGH$ 
      case HEADER_TYPE_NORMAL: 
       if (header.extras != null 
         && header.extras.containsKey(ManageAccountsSettings.KEY_ACCOUNT_TYPE)) { 
        String accType = header.extras.getString(
          ManageAccountsSettings.KEY_ACCOUNT_TYPE); 
        ViewGroup.LayoutParams lp = holder.icon.getLayoutParams(); 
        lp.width = getContext().getResources().getDimensionPixelSize(
          R.dimen.header_icon_width); 
        lp.height = lp.width; 
        holder.icon.setLayoutParams(lp); 
        Drawable icon = mAuthHelper.getDrawableForType(getContext(), accType); 
        holder.icon.setImageDrawable(icon); 
       } else { 
        holder.icon.setImageResource(header.iconRes); 
       } 
       holder.title.setText(header.getTitle(getContext().getResources())); 
       CharSequence summary = header.getSummary(getContext().getResources()); 
       if (!TextUtils.isEmpty(summary)) { 
        holder.summary.setVisibility(View.VISIBLE); 
        holder.summary.setText(summary); 
       } else { 
        holder.summary.setVisibility(View.GONE); 
       } 
       break; 
     } 

     return view; 
    } 

    public void resume() { 
     mWifiEnabler.resume(); 
     mBluetoothEnabler.resume(); 
     mProfileEnabler.resume(); 
    } 

    public void pause() { 
     mWifiEnabler.pause(); 
     mBluetoothEnabler.pause(); 
     mProfileEnabler.pause(); 
    } 
} 
+0

именно то, что я искал .. Спасибо за ваши усилия .. – Adithya

Смежные вопросы