我需要真正参考PreferenceActivity中的组件。
CheckBoxPreference myPref = (CheckBoxPreference) findPreference("setting1");
View v = (View)myPref.getView(null, getListView());
此代码返回我想要的视图,但它实际上是我想要的副本并在那里更改属性,不会更改真实对象。
请注意,我需要更改其中组件的某些属性(如颜色或对齐方式)。 而且我也知道我可以使用Layout,但由于某些原因,我想以编程方式执行它
答案 0 :(得分:0)
想出:this.getListView()返回一个ViewGroup,它包含ListView中的所有内容。通过遍历孩子,一切都可以访问。
在onCreate事件中只有一个问题,ListView将被填充,因此一个解决方案是轮询并检查它是否已填充(例如bt定义AsyncTask。
public class AsyncChecker extends AsyncTask <Void, Void, Boolean> {
public interface AsyncCheckerCallbackInterface {
boolean checkFunction();
void checkDone(Boolean result);
}
private int period;
private int maxTime;
final AsyncCheckerCallbackInterface callback;
public static void Start(int period, int maxTime, AsyncCheckerCallbackInterface callback){
new AsyncChecker(period, maxTime, callback).execute();
}
public AsyncChecker(int period, int maxTime, AsyncCheckerCallbackInterface callback) {
this.period = period;
this.maxTime = maxTime;
this.callback = callback;
}
@Override
protected Boolean doInBackground(Void... arg0) {
long startTime = System.currentTimeMillis();
while(System.currentTimeMillis() - startTime < maxTime){
if (callback.checkFunction())
return true;
try {
Thread.sleep(period);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return false;
}
@Override
protected void onPostExecute(Boolean result) {
callback.checkDone(result);
}
}
public static void DoIt(final PreferenceActivity pref){
AsyncChecker.Start(10, 1000, new AsyncChecker.AsyncCheckerCallbackInterface() {
public boolean checkFunction() {
int childCount = pref.getListView().getChildCount();
if (childCount > 0)
return true;
return false;
}
public void checkDone(Boolean result) {
if (result)
new PreferencesRightAligner().Recursive(pref.getListView());
}
});
}
private void Recursive(View v){
if (v instanceof CheckBox){
TextView chk = ((TextView) v);
ViewGroup father = (ViewGroup)chk.getParent();
ViewGroup grandpa = (ViewGroup)father.getParent();
//if (grandpa.indexOfChild(father) != 1){
grandpa.removeView(father);
grandpa.addView(father, 0);
//}
}
else if (v instanceof TextView){
TextView txt = ((TextView) v);
}
else if (v instanceof RelativeLayout){
RelativeLayout lay = ((RelativeLayout) v);
((RelativeLayout) v).setGravity(Gravity.RIGHT);
}
if (count!=0 && v instanceof LinearLayout){
LinearLayout lay = ((LinearLayout) v);
((LinearLayout) v).setGravity(Gravity.LEFT);
}
if (v instanceof ViewGroup){
int childCount = ((ViewGroup)v).getChildCount();
for(int i=0; i<childCount; i++) {
View c = ((ViewGroup)v).getChildAt(i);
Recursive(c);
}
}
}
在onCreate中:
DoIt(this);