2016-11-17 63 views
0
访问按钮

我在首以这种方式创建按钮:如何PreferenceActivity

<PreferenceScreen> 
    <Preference 
    android:key="resetBD" 
    android:title="@string/ajustes_almacenamiento" 
    android:summary="@string/ajustes_almacenamiento_desc" 
    android:widgetLayout="@layout/pref_reset_bd_button" > 
    </Preference> 
</PreferenceScreen> 

布局/ pref_reset_bd_button.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/submit_layout_button" 
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent" 
    android:weightSum="10"> 
<Button 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/resetButton" 
    android:text="Reset" 
    android:layout_width="wrap_content" 
    android:onClick="submitWifiToDevice" 
    android:layout_height="wrap_content"> 
</Button> 
</LinearLayout> 

在PreferenceFragment我successfuly访问/获取按钮这样做:

 View footerView = ((LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.pref_reset_bd_button, null, false); 
     resetButton= (Button) footerView.findViewById(R.id.resetButton); 

但是当我尝试更改按钮文字

resetButton.setText("NEW ONE"); 

(或禁用)什么也没有发生。我究竟做错了什么?

+0

您必须在屏幕可见之前刷新屏幕。抱歉从头我不知道目前如何。 – greenapps

+1

你是否把setText放在任何条件下? – garima

+0

我看到在android-studio debuger该按钮获取新文本,但它不在模拟器中更新 –

回答

0

试试这个。创建一个自定义的偏好:

public class PreferenceWidget extends Preference { 
    private View mView; 

    @Override 
    protected void onBindView(View view) { 
     super.onBindView(view); 
     mView = view.findViewById(R.id.resetButton); 
    } 

    public View getView() { 
     return mView; 
    } 
} 

然后改变自己的喜好XML

<PreferenceScreen> 
    <package.PreferenceWidget 
    android:key="resetBD" 
    android:title="@string/ajustes_almacenamiento" 
    android:summary="@string/ajustes_almacenamiento_desc" 
    android:widgetLayout="@layout/pref_reset_bd_button" > 
    </package.PreferenceWidget > 
</PreferenceScreen> 

然后获取视图

PreferenceWidget p = (PreferenceWidget)findPreference("resetBD"); 
Button b = (Button)p.getView(); 
b.setText("Hello"); 

原来的答复:

你不应该有自己膨胀视图。这应该发生在您对addPreferencesFromResource的调用中。

然后,您可以获取首选项,获取首选项的视图,找到按钮视图,然后设置文本。

Preference p = findPreference("resetBD"); 
View v = p.getView(null, null); 
Button b = (Button)v.findViewById(R.id.resetButton); 
v.setText("Hello"); 

虽然,因为no one seems to know如何使用Preference.getView功能,您可能需要创建一个自定义的优先对象。

+0

这是一样的......在android-studio debuger我获得按钮并成功设置新文本,但在模拟器按钮文本不会改变。 –

+0

您是否尝试过在设备上进行测试? – Mike

+0

是的,它不会改变。例如,我可以更改首选项标题,但不能包含widgetLayout的内容 –