Android ListView实现单选

来源:互联网 发布:直销奖金制度软件 编辑:程序博客网 时间:2024/06/15 02:02

1、布局文件

<ListView       android:id="@+id/navi_list"       android:layout_width="match_parent"       android:layout_height="wrap_content"        android:paddingLeft="8px"       android:paddingRight="8px"            />

2、ListView的适配器布局文件

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="horizontal"     android:background="@color/list_back"    android:gravity="center"    >    <RadioButton         android:id="@+id/navi_list_item_rb"        style="@style/volume_fragment_rb_stytle"        android:checked="false"        android:clickable="false"        android:focusable="false"        /><ImageView android:id="@+id/navi_list_item_iv"    android:layout_marginLeft="10px"    android:layout_width="30px"    android:layout_height="30px"    android:background="@drawable/ic_launcher"    /></LinearLayout>

3、主文件和适配器代码,下面是做语言适配时候的代码,供以后参考

public class LanguageFragment extends RTBaseFragment implements OnItemClickListener {private String TAG = "LanguageFragment";private ListView language_lv;private String[] languageItemString = null;//private final Locale[] languageLocalString = new Locale[]{Locale.SIMPLIFIED_CHINESE,Locale.TRADITIONAL_CHINESE,Locale.US,Locale.KOREA,Locale.JAPAN};private final Locale[] languageLocalString = new Locale[]{Locale.SIMPLIFIED_CHINESE,Locale.US};private List<LanguageInfo> mListLanguageInfo;private LanguageAdapter languageAdapter;private int selectPosition = 0;//默认显示第一个@Overrideprotected int setView() {return R.layout.language_fragment_layout;}@Overrideprotected void initView(View view) {language_lv = (ListView) view.findViewById(R.id.language_lv);//languageItemString = new String[]{mContext.getString(R.string.simplified_chinese),mContext.getString(R.string.traditional_chinese),//mContext.getString(R.string.language_english),mContext.getString(R.string.language_korea),mContext.getString(R.string.language_japan)};languageItemString = new String[]{mContext.getString(R.string.simplified_chinese),mContext.getString(R.string.language_english)};getListData();initLanguage();languageAdapter = new LanguageAdapter(mListLanguageInfo);language_lv.setAdapter(languageAdapter);}@Overrideprotected void initEvent() {language_lv.setOnItemClickListener(this);}@Overrideprotected void initData() {}@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {LanguageInfo mInfo = mListLanguageInfo.get(position);updateLanguage(mInfo);selectPosition = position;languageAdapter.notifyDataSetChanged();}public class LanguageAdapter extends BaseAdapter{private List<LanguageInfo> list;public LanguageAdapter(List<LanguageInfo> listDates){list = listDates;}@Overridepublic int getCount() {return list.size();}@Overridepublic Object getItem(int position) {return list.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder viewHolder = null;if(convertView==null){convertView = LayoutInflater.from(mContext).inflate(R.layout.language_list_item, null);viewHolder = new ViewHolder();viewHolder.radioButton = (RadioButton) convertView.findViewById(R.id.language_list_item_rb);convertView.setTag(viewHolder);}else{viewHolder = (ViewHolder) convertView.getTag();}viewHolder.radioButton.setText(list.get(position).getLanguage());if(selectPosition == position){                viewHolder.radioButton.setChecked(true);            }            else{                viewHolder.radioButton.setChecked(false);            }return convertView;}public class ViewHolder{public RadioButton radioButton;}}/** * 初始化本地语言 */private void initLanguage() {Locale currentLocale = getCurrentLocale(mContext);for (int i = 0; i < mListLanguageInfo.size(); i++) {Locale temp = mListLanguageInfo.get(i).getLocale();if(temp.equals(currentLocale)){//标记当前itemselectPosition = i;return;}}}/** * 获取数据 * @return */public void getListData() {mListLanguageInfo = new ArrayList<LanguageInfo>();        for (int i = 0; i < languageItemString.length; i++) {        LanguageInfo mLanguageInfo = new LanguageInfo();        mLanguageInfo.setLanguage(languageItemString[i]);        mLanguageInfo.setLocale(languageLocalString[i]);        mListLanguageInfo.add(mLanguageInfo);}}/** * 更换语言 * @param info */public void updateLanguage(final LanguageInfo info){new Thread(new Runnable() {@Overridepublic void run() {// 更改系统语言UpdateLanguageUtils.updateLanguage(info.getLocale());}}).start();}/** * 获取当前系统语言 * @param mContext * @return */public Locale getCurrentLocale(Context mContext){Locale locale = mContext.getResources().getConfiguration().locale;return locale;}}
4、所加权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" />   <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" /> 
5、Utils相关代码

public class UpdateLanguageUtils {public static void updateLanguage(Locale locale) {try {Object objIActMag, objActMagNative;Class clzIActMag = Class.forName("android.app.IActivityManager");Class clzActMagNative = Class.forName("android.app.ActivityManagerNative");Method mtdActMagNative$getDefault = clzActMagNative.getDeclaredMethod("getDefault");objIActMag = mtdActMagNative$getDefault.invoke(clzActMagNative);Method mtdIActMag$getConfiguration = clzIActMag.getDeclaredMethod("getConfiguration");Configuration config = (Configuration) mtdIActMag$getConfiguration.invoke(objIActMag);config.locale = locale;Class clzConfig = Class.forName("android.content.res.Configuration");java.lang.reflect.Field userSetLocale = clzConfig.getField("userSetLocale");userSetLocale.set(config, true);Class[] clzParams = { Configuration.class };Method mtdIActMag$updateConfiguration = clzIActMag.getDeclaredMethod("updateConfiguration", clzParams);mtdIActMag$updateConfiguration.invoke(objIActMag, config);} catch (Exception e) {e.printStackTrace();}}}





原创粉丝点击