PreferenceFragment getListView

时间:2015-12-28 05:53:24

标签: java android preferencefragment

(谷歌翻译) 我有一个带图标和ImageView的自定义PreferenceFragment。此屏幕控制我的应用程序的通知。通过单击项禁用或在单击ImageView(soundIcon)时启用通知,不断更改通知类型(振动,声音)。但是当我点击ImageView(soundIcon)时,我不知道如何获得Item位置。这是我的代码和screeshot:

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

1 个答案:

答案 0 :(得分:0)

您不需要职位。您可以简单地匹配首选项的偏好.getKey()