Preference 跳转至某个位置

该代码是参考android Settings里面在安装app时没有打开“安装未知来源应用” 时根据系统提示跳转至这个开关处:

import android.os.Bundle;
import android.os.Handler;
import android.preference.CheckBoxPreference;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceActivity;
import android.preference.PreferenceGroup;
import android.util.Log;
import android.view.Menu;
import android.widget.ListView;

public class MainActivity extends PreferenceActivity {
	private static final String KEY_DEVICEINFO = "device_info";
	int mDeviceInfoCountdown;
	char myChar='a';
	private CheckBoxPreference ck;
	private Preference my;
	int deviceInfoPosition;
	private Handler mScrollHandler = new Handler();

	private Runnable mScrollRunner = new Runnable() {
		public void run() {
			ListView lastView = getListView();
			// move to the visiable position.
			lastView.setItemChecked(deviceInfoPosition - 1, true);
			lastView.setSelection(deviceInfoPosition - 1);
		}
	};

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		addPreferencesFromResource(R.xml.pre);
		ck = (CheckBoxPreference) findPreference("set_visiable");
		ck.setOnPreferenceClickListener(new OnPreferenceClickListener() {
			
			@Override
			public boolean onPreferenceClick(Preference preference) {
				// TODO Auto-generated method stub
				if (ck.isChecked()) {
					addPreference();//点击一次新增一个Preference使位置增加
					getPreferenceScreen().addPreference(my);
					deviceInfoPosition = 0;
					findPreferencePosition(KEY_DEVICEINFO, getPreferenceScreen());
					mScrollHandler.postDelayed(mScrollRunner, 100);
					Log.e("info", "check true===="+deviceInfoPosition);
				} else {
					getPreferenceScreen().removePreference(my);
				}
				return true;
			}
		});
		
		my = new Preference(this);
		my.setTitle("new add");
		my.setKey(KEY_DEVICEINFO);
		my.setSummary("new ................");
		getPreferenceScreen().addPreference(my);

	}
	
	private void addPreference(){
		if(myChar<'z'){
			String temp = myChar+"";
			Preference pf=new Preference(this);
			pf.setTitle(temp.toUpperCase());
			pf.setKey(temp);
			pf.setSummary(temp);
			getPreferenceScreen().addPreference(pf);
			myChar++;
		}
	}

	private Preference findPreferencePosition(CharSequence key,
			PreferenceGroup root) {
		if (key.equals(root.getKey())) {
			return root;
		} else {
			deviceInfoPosition++;
		}
		final int preferenceCount = root.getPreferenceCount();
		for (int i = 0; i < preferenceCount; i++) {
			final Preference preference = root.getPreference(i);
			final String curKey = preference.getKey();
			if (curKey != null && curKey.equals(key)) {
				return preference;
			}

			if (preference instanceof PreferenceGroup) {
				PreferenceGroup group = (PreferenceGroup) preference;
				final Preference returnedPreference = findPreferencePosition(
						key, group);
				if (returnedPreference != null) {
					return returnedPreference;
				}
			} else {
				deviceInfoPosition++;
			}
		}

		return null;
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}

pre.xml

<pre name="code" class="java"><?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
	
    <PreferenceCategory
        android:key="set_VPN_Category"
        android:title="jump" >
        <CheckBoxPreference
            android:key="set_visiable"
            android:summaryOff="隐藏"
            android:summaryOn="显示"
            android:title="跳转" />
    </PreferenceCategory>
    
    <PreferenceCategory
        android:key="set_net"
        android:title="网络设置" >
        <CheckBoxPreference
            android:key="set_3g"
            android:summary="使用3G虽可提高数据载入速度,但可能会降低电池寿命"
            android:title="启用3G" />
        <CheckBoxPreference
            android:key="set_2g"
            android:summaryOff="打开蜂窝数据"
            android:summaryOn="关闭蜂窝数据"
            android:title="蜂窝数据" />

        <Preference
            android:key="set_2g_net"
            android:title="蜂窝数据网络" />

        <CheckBoxPreference
            android:key="set_roving"
            android:summary="在境外时请关闭数据漫游"
            android:title="数据漫游" />
    </PreferenceCategory>
    <PreferenceCategory
        android:key="set_VPN_Category"
        android:title="VPN设置1" >
        <Preference
            android:key="set_VPN"
            android:title="设置VPN" />
    </PreferenceCategory>
    <PreferenceCategory
        android:key="set_VPN_Category"
        android:title="VPN设置2" >
        <Preference
            android:key="set_VPN"
            android:title="设置VPN" />
    </PreferenceCategory>
    <PreferenceCategory
        android:key="set_VPN_Category"
        android:title="VPN设置3" >
        <Preference
            android:key="set_VPN"
            android:title="设置VPN" />
    </PreferenceCategory>
    <PreferenceCategory
        android:key="set_VPN_Category"
        android:title="VPN设置4" >
        <Preference
            android:key="set_VPN"
            android:title="设置VPN" />
    </PreferenceCategory>

</PreferenceScreen>



 



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值