(谷歌翻译) 我有一个带图标和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>
答案 0 :(得分:0)
您不需要职位。您可以简单地匹配首选项的偏好.getKey()