Note that there are some explanatory texts on larger screens.

plurals
  1. POCustom preference jumping all over screen
    primarykey
    data
    text
    <p>I have written a custom preference class which contains a simple progress bar in it to allow setting things like volume. The preference worked great until I tried putting two of these preference in my preference screen. </p> <p>When I did that the preference screen started to act wierdly » the two custom preferences switch locations constantly as i drag the seek bar. </p> <p>Any one have any idea why this is happening? Thanks</p> <p>EDIT: here is the code of the custom preference</p> <pre><code>import android.content.Context; import android.content.SharedPreferences; import android.content.res.TypedArray; import android.graphics.Typeface; import android.preference.Preference; import android.util.AttributeSet; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; import android.widget.TextView; public class SeekBarPreference extends Preference implements OnSeekBarChangeListener { private int mMaximum = 60; private int mInterval = 1; private int mMinimum = 1; private int mDefault = 50; private TextView monitorBox; public SeekBarPreference(Context context) { super(context); } public SeekBarPreference(Context context, AttributeSet attrs) { super(context, attrs); initValues(context, attrs); } public SeekBarPreference(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); initValues(context, attrs); } private void initValues(Context context, AttributeSet attrs) { TypedArray styledAttributes = context.obtainStyledAttributes(attrs, R.styleable.SeekBarPreference); mMinimum = styledAttributes.getInt( R.styleable.SeekBarPreference_barMinValue, 1); mMaximum = styledAttributes.getInt( R.styleable.SeekBarPreference_barMaxValue, 1); mInterval = styledAttributes.getInt( R.styleable.SeekBarPreference_barInterval, 1); mDefault = styledAttributes.getInt( R.styleable.SeekBarPreference_defaultValue, mMaximum); } @Override protected View onCreateView(ViewGroup parent) { LinearLayout horizontalLayout = new LinearLayout(getContext()); horizontalLayout.setPadding(15, 5, 10, 5); horizontalLayout.setOrientation(LinearLayout.HORIZONTAL); LinearLayout verticalLayout = new LinearLayout(getContext()); verticalLayout.setOrientation(LinearLayout.VERTICAL); LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); layoutParams.gravity = Gravity.LEFT; layoutParams.weight = 0.5f; LinearLayout.LayoutParams settingTitleLayoutParams = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); settingTitleLayoutParams.gravity = Gravity.LEFT; settingTitleLayoutParams.weight = 1.0f; LinearLayout.LayoutParams seekbarLayoutParams = new LinearLayout.LayoutParams( 80, LinearLayout.LayoutParams.WRAP_CONTENT); seekbarLayoutParams.gravity = Gravity.RIGHT | Gravity.CENTER_VERTICAL; LinearLayout.LayoutParams selectedAmountLayoutParams = new LinearLayout.LayoutParams( 30, LinearLayout.LayoutParams.WRAP_CONTENT); selectedAmountLayoutParams.gravity = Gravity.CENTER; TextView titleTextView = new TextView(getContext()); titleTextView.setText(getTitle()); titleTextView.setTextSize(18); titleTextView.setTypeface(Typeface.SANS_SERIF, Typeface.BOLD); titleTextView.setGravity(Gravity.LEFT); titleTextView.setLayoutParams(settingTitleLayoutParams); TextView summeryTextView = new TextView(getContext()); summeryTextView.setText(getSummary()); summeryTextView.setTextSize(14); summeryTextView.setTypeface(Typeface.SANS_SERIF); summeryTextView.setGravity(Gravity.LEFT); summeryTextView.setLayoutParams(settingTitleLayoutParams); SeekBar bar = new SeekBar(getContext()); bar.setMax(mMaximum); bar.setProgress(mDefault); bar.setPadding(10, 0, 10, 0); bar.setLayoutParams(seekbarLayoutParams); bar.setOnSeekBarChangeListener(this); this.monitorBox = new TextView(getContext()); this.monitorBox.setTextSize(12); this.monitorBox.setTypeface(Typeface.MONOSPACE, Typeface.ITALIC); this.monitorBox.setLayoutParams(selectedAmountLayoutParams); this.monitorBox.setPadding(2, 5, 0, 0); this.monitorBox.setText(bar.getProgress() + ""); verticalLayout.addView(titleTextView); verticalLayout.addView(summeryTextView); horizontalLayout.addView(verticalLayout, layoutParams); horizontalLayout.addView(bar); horizontalLayout.addView(this.monitorBox); horizontalLayout.setId(android.R.id.widget_frame); return horizontalLayout; } public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { progress = Math.round(((float) progress) / mInterval) * mInterval; if (progress &lt; mMinimum) { progress = mMinimum; } if (!callChangeListener(progress)) { seekBar.setProgress((int) this.mDefault); return; } seekBar.setProgress(progress); this.mDefault = progress; this.monitorBox.setText(progress + ""); updatePreference(progress); notifyChanged(); } public void onStartTrackingTouch(SeekBar seekBar) { } public void onStopTrackingTouch(SeekBar seekBar) { } @Override protected Object onGetDefaultValue(TypedArray ta, int index) { int dValue = (int) ta.getInt(index, 5); return validateValue(dValue); } @Override protected void onSetInitialValue(boolean restoreValue, Object defaultValue) { int temp = restoreValue ? getPersistedInt(5) : (Integer) defaultValue; if (!restoreValue) persistInt(temp); this.mDefault = temp; } private int validateValue(int value) { if (value &gt; mMaximum) value = mMaximum; else if (value &lt; 0) value = 0; else if (value % mInterval != 0) value = Math.round(((float) value) / mInterval) * mInterval; return value; } private void updatePreference(int newValue) { SharedPreferences.Editor editor = getEditor(); editor.putInt(getKey(), newValue); editor.commit(); } } </code></pre> <p>EDIT: I have found that creating a second class with the excat same code but different name an using one of each solves the problem = worst soulution ever. I do not want to do this. anyone have any idea?</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload