preference自定义布局findViewById无法使用的问题

来源:互联网 发布:乐视手机4g网络设置 编辑:程序博客网 时间:2024/05/16 10:34

在preference中加入自定义,无法使用findViewById,编译会报错,估计很多同学跟我一样遇到过这个问题。

由于最近刚开发了一个客户需求,也遇到这样的问题,现在已经解决,我搜了下网上好像没有类似的文档,我就自己写个,希望对大家有所帮助。

1、首先自定义个继承preference的类Testpreference,然后在布局中调用:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
    android:title="@string/storage_settings_title" >


    <PreferenceCategory
        android:key="phone_ram_category"
        android:title="@string/storage_settings_title" >

    <com.android.settings.deviceinfo.Testpreference

        android:key="text_key"

       android:fragment="com.android.settings.deviceinfo.Memory"/>
    </PreferenceCategory>
</PreferenceScreen>

 

2、Testpreference类的部分代码如下:

public class CpMemoryPreference extends Preference {

…… ……

 public CpMemoryPreference(Context context, AttributeSet attrs) {
  super(context, attrs);    // 注:必须是2个参数的,否则会报错
  mContext = context;
 }

// 重点来了,复写onCreateView方法,就可以对自定义布局做各种操作啦
 @Override
 protected View onCreateView(ViewGroup parent) {
  // TODO Auto-generated method stub
  LayoutInflater inflater=(LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  View layout = inflater.inflate(R.layout.test_linear_layout, null);  // 加载自定义布局.test_linear_layout
  mMaxTitle = (TextView)layout.findViewById(R.id.max_title);   // 现在就findViewById 了
  return layout;
 }

 …… ……
}


3、如何调用布局中的com.android.settings.deviceinfo.Memory呢,

在调用自定义布局的类中(一般是)

先找到key

mTest = (Testpreference)findPreference("text_key");

然后在 onPreferenceTreeClick方法中加入如下代码:

if(mTest == preference){
         super.onPreferenceTreeClick(preferenceScreen, mTest);
         return true;  // 一定要return true,否则按键不起作用

      }

当然如果要想按键做其他功能,在if(mTest == preference)判断中加入你想调用的功能即可。

OK,搞定!

 

0 0
原创粉丝点击