2015-12-28 4 views
0

(Google Translate) У меня есть пользовательский PreferenceFragment с иконкой и ImageView. Этот экран управляет уведомлением о моем приложении. При нажатии на элемент отключить или включить уведомление при щелчке по ImageView (soundIcon), постоянно изменяя тип уведомления (вибрация, звук). Но когда я нажимаю на ImageView (soundIcon), я не знаю, как я могу получить позицию позиции. Вот мой код и Screeshot:PreferenceFragment getListView

FragmentNotification класс

public class FragmentNotifications extends PreferenceFragment { 

    CheckBoxPreference beforeInputTrafficLighter; 
    CheckBoxPreference brakeTesting; 
    CheckBoxPreference speedLimit; 
    CheckBoxPreference passengerTrains; 

    View v; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.pref); 
     beforeInputTrafficLighter = (CheckBoxPreference)findPreference("BeforeInputTrafficLighter"); 
     brakeTesting = (CheckBoxPreference)findPreference("BrakeTesting"); 
     speedLimit = (CheckBoxPreference)findPreference("SpeedLimit"); 
     passengerTrains = (CheckBoxPreference)findPreference("PassengerTrains"); 

     final IconPreferenceScreen ipsBeforeInputTrafficLighter = (IconPreferenceScreen) findPreference("BeforeInputTrafficLighter"); 
     final IconPreferenceScreen ipsBrakeTesting = (IconPreferenceScreen) findPreference("BrakeTesting"); 
     final IconPreferenceScreen ipsSpeedLimit = (IconPreferenceScreen) findPreference("SpeedLimit"); 
     final IconPreferenceScreen ipsPassengerTrains = (IconPreferenceScreen) findPreference("PassengerTrains"); 
     final Drawable beforeInputTrafficLighterIcon = ContextCompat.getDrawable(getActivity(), R.drawable.ic_traffic_light_teal_48dp); 
     final Drawable beforeInputTrafficLighterIconGrey = ContextCompat.getDrawable(getActivity(), R.drawable.ic_traffic_light_grey_48dp); 
     final Drawable brakeTestingIcon = ContextCompat.getDrawable(getActivity(), R.drawable.ic_brake_testing_red_48dp); 
     final Drawable brakeTestingIconGrey = ContextCompat.getDrawable(getActivity(), R.drawable.ic_brake_testing_grey_48dp); 
     final Drawable speedLimitIcon = ContextCompat.getDrawable(getActivity(), R.drawable.ic_speed_limit_blue_48dp); 
     final Drawable speedLimitIconGrey = ContextCompat.getDrawable(getActivity(), R.drawable.ic_speed_limit_grey_48dp); 
     final Drawable passengerTrainsIcon = ContextCompat.getDrawable(getActivity(), R.drawable.ic_passenger_trains_purple_48dp); 
     final Drawable passengerTrainsIconGrey = ContextCompat.getDrawable(getActivity(), R.drawable.ic_passenger_trains_grey_48dp); 

     final boolean[] beforeInputTrafficLighterColor = {true}; 
     beforeInputTrafficLighterColor[0] = this.beforeInputTrafficLighter.isChecked(); 
     if(beforeInputTrafficLighterColor[0]){ 
      ipsBeforeInputTrafficLighter.setIcon(beforeInputTrafficLighterIcon); 
     }else{ 
      ipsBeforeInputTrafficLighter.setIcon(beforeInputTrafficLighterIconGrey); 
     } 
     ipsBeforeInputTrafficLighter.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { 
      @Override 
      public boolean onPreferenceClick(Preference preference) { 
       if (beforeInputTrafficLighterColor[0]) { 
        ipsBeforeInputTrafficLighter.setIcon(beforeInputTrafficLighterIconGrey); 
       } else { 
        ipsBeforeInputTrafficLighter.setIcon(beforeInputTrafficLighterIcon); 
       } 
       beforeInputTrafficLighterColor[0] = !beforeInputTrafficLighterColor[0]; 
       return false; 
      } 
     }); 

     final boolean[] brakeTestingColor = {true}; 
     brakeTestingColor[0] = this.brakeTesting.isChecked(); 
     if(brakeTestingColor[0]){ 
      ipsBrakeTesting.setIcon(brakeTestingIcon); 
     }else{ 
      ipsBrakeTesting.setIcon(brakeTestingIconGrey); 
     } 
     ipsBrakeTesting.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { 
      @Override 
      public boolean onPreferenceClick(Preference preference) { 
       if (brakeTestingColor[0]) { 
        ipsBrakeTesting.setIcon(brakeTestingIconGrey); 
       } else { 
        ipsBrakeTesting.setIcon(brakeTestingIcon); 
       } 
       brakeTestingColor[0] = !brakeTestingColor[0]; 
       return false; 
      } 
     }); 

     final boolean[] speedLimitColor = {true}; 
     speedLimitColor[0] = this.speedLimit.isChecked(); 
     if(speedLimitColor[0]){ 
      ipsSpeedLimit.setIcon(speedLimitIcon); 
     }else{ 
      ipsSpeedLimit.setIcon(speedLimitIconGrey); 
     } 
     ipsSpeedLimit.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { 
      @Override 
      public boolean onPreferenceClick(Preference preference) { 
       if (speedLimitColor[0]) { 
        ipsSpeedLimit.setIcon(speedLimitIconGrey); 
       } else { 
        ipsSpeedLimit.setIcon(speedLimitIcon); 
       } 
       speedLimitColor[0] = !speedLimitColor[0]; 
       return false; 
      } 
     }); 

     final boolean[] passengerTrainsColor = {true}; 
     passengerTrainsColor[0] = this.passengerTrains.isChecked(); 
     if(passengerTrainsColor[0]){ 
      ipsPassengerTrains.setIcon(passengerTrainsIcon); 
     }else{ 
      ipsPassengerTrains.setIcon(passengerTrainsIconGrey); 
     } 
     ipsPassengerTrains.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { 
      @Override 
      public boolean onPreferenceClick(Preference preference) { 
       if (passengerTrainsColor[0]) { 
        ipsPassengerTrains.setIcon(passengerTrainsIconGrey); 
       } else { 
        ipsPassengerTrains.setIcon(passengerTrainsIcon); 
       } 
       passengerTrainsColor[0] = !passengerTrainsColor[0]; 
       return false; 
      } 
     }); 

    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     v = inflater.inflate(R.layout.preference_icon, null); 

//  final ListView lv = (ListView)v.findViewById(android.R.id.list); 
//  if(lv != null){ 
//   lv.setOnKeyListener(new View.OnKeyListener() { 
//    @Override 
//    public boolean onKey(View v, int keyCode, KeyEvent event) { 
//     Log.d("fg", "action is " + event.getAction()); 
//     if(event.getAction() == KeyEvent.ACTION_DOWN){ 
//      Log.d("fg", "Pos " + lv.getSelectedItemPosition()); 
//      Toast.makeText(getActivity(), "Position " + lv.getSelectedItemPosition(), Toast.LENGTH_SHORT).show(); 
//     } 
//     return false; 
//    } 
//   }); 
//   lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
//    @Override 
//    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
//     Log.d("fg", "lv item is clicked"); 
//    } 
//   }); 
// 
//  }else{ 
//   Log.d("fg", "lv is null"); 
//  } 
// 
// 
//  Log.d("fg", "Listview = " + lv); 

     return v; 
    } 
} 

IconPreferenceScreen класс

public class IconPreferenceScreen extends CheckBoxPreference { 

    private Drawable mIcon; 

    public IconPreferenceScreen(Context context, AttributeSet attrs) { 
     this(context, attrs, 0); 
    } 

    public IconPreferenceScreen(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     setLayoutResource(R.layout.preference_icon); 
     TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.IconPreferenceScreen, defStyle, 0); 
     mIcon = a.getDrawable(R.styleable.IconPreferenceScreen_myIcon); 
    } 

    @Override 
    protected View onCreateView(ViewGroup parent) { 

     return super.onCreateView(parent); 
    } 

    @Override 
    public void onBindView(View view) { 
     super.onBindView(view); 
     //add icon 
     ImageView imageView = (ImageView) view.findViewById(R.id.icon); 
     if (imageView != null && mIcon != null) { 
      imageView.getLayoutParams().height = 150; 
      imageView.getLayoutParams().width = 150; 
      imageView.setImageDrawable(mIcon); 
     } 
     //add soundIcon 
     LinearLayout iconpref = (LinearLayout)view.findViewById(R.id.iconpref); 
     final ImageView soundIcon = new ImageView(getContext()); 
     soundIcon.setImageDrawable(ContextCompat.getDrawable(getContext(), R.drawable.ic_sound_off_grey_48dp)); 
     soundIcon.setLayoutParams(new ViewGroup.LayoutParams(
       125, 
       125)); 
     iconpref.setGravity(Gravity.CENTER_VERTICAL); 
     soundIcon.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Toast.makeText(getContext(), "naja", Toast.LENGTH_SHORT).show(); 
       if (soundIcon.getAlpha() == 1f) { 
        soundIcon.setAlpha(0.4f); 
       } else { 
        soundIcon.setAlpha(1f); 
       } 
      } 
     }); 
     iconpref.addView(soundIcon); 



    } 

    public void setIcon(Drawable icon) { 
     if ((icon == null && mIcon != null) || (icon != null && !icon.equals(mIcon))) { 
      mIcon = icon; 
      notifyChanged(); 
     } 
    } 

    public Drawable getIcon() { 
     return mIcon; 
    } 
} 

pref.xml

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 

    <comzaqxs.vk.com.appname.customViews.IconPreferenceScreen 
     android:defaultValue="true" 
     android:key="BeforeInputTrafficLighter" 
     android:summary="@string/settings_check_box_before_input_traffic_lighters_summary" 
     android:title="@string/settings_check_box_before_input_traffic_lighters"/> 

    <comzaqxs.vk.com.appname.customViews.IconPreferenceScreen 
     android:defaultValue="true" 
     android:key="BrakeTesting" 
     android:summary="@string/settings_check_box_testing_breakers_summary" 
     android:title="@string/settings_check_box_testing_breakers"/> 

    <comzaqxs.vk.com.appname.customViews.IconPreferenceScreen 
     android:defaultValue="true" 
     android:key="SpeedLimit" 
     android:summary="@string/settings_check_box_speed_limit_summary" 
     android:title="@string/settings_check_box_speed_limit"/> 

    <comzaqxs.vk.com.appname.customViews.IconPreferenceScreen 
     android:defaultValue="true" 
     android:key="PassengerTrains" 
     android:summary="@string/settings_check_box_passenger_trains_summary" 
     android:title="@string/settings_check_box_passenger_trains"/> 



</PreferenceScreen> 

preference_icon.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout android:id="@+id/iconpref" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_centerVertical="true" 
    android:minHeight="?android:attr/listPreferredItemHeight" 
    android:paddingRight="?android:attr/scrollbarSize"> 

    <ImageView android:id="@+id/icon" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginRight="6dip" 
     android:layout_marginLeft="6dip" 
     android:layout_gravity="center" /> 

    <RelativeLayout android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="6dip" 
     android:layout_marginBottom="6dip" 
     android:layout_weight="1"> 

     <ListView 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:id="@id/android:list" 
      android:alpha="1" /> 

     <TextView android:id="@+android:id/title" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:singleLine="true" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      android:ellipsize="marquee" 
      android:fadingEdge="horizontal" /> 
     <TextView android:id="@+android:id/summary" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@android:id/title" 
      android:layout_alignLeft="@android:id/title" 
      android:textAppearance="?android:attr/textAppearanceSmall" 
      android:maxLines="2" /> 

    </RelativeLayout> 

</LinearLayout> 

enter image description here

ответ

0

У вас нет необходимости позиции .Вы может просто соответствовать ключ предпочтения preference.getKey()

+0

Спасибо! Это помогло !!! – niklas1987

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