我在MyView類中創建了自定義視圖,並且想要在我的MainActivity類中使用onSharedPreferenceChanged
方法顯示或隱藏mLevel
。修改其他類的自定義視圖Android
這裏是MyView.java
:
public class MyView extends LinearLayout {
private final TextView mLevel;
public StatusBarView(Context context) {
this(context, null, 0);
}
public StatusBarView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public StatusBarView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setGravity(Gravity.CENTER_VERTICAL);
LayoutInflater.from(context).inflate(R.layout.my_level_view, this);
mLevel = (TextView) findViewById(R.id.levelTextView);
}
public void showLevel(boolean bShowLevel) {
if (bShowLevel) {
mLevel.setVisibility(View.VISIBLE);
mLevel.setText(mService.getLevel());
} else {
mLevel.setVisibility(View.GONE);
}
}
}
在這裏,我有MainActivity.java
:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Display the fragment as the main content.
getFragmentManager().beginTransaction().replace(android.R.id.content, new PrefsFragment()).commit();
}
public class PrefsFragment extends PreferenceFragment
implements SharedPreferences.OnSharedPreferenceChangeListener {
private TextView mLevel;
private LevelService mLevelService = new LevelService();
private MyView mMyView = new MyView(getBaseContext());
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.preferences);
mLevel = (TextView) findViewById(R.id.levelTextView);
}
@Override
public void onResume() {
super.onResume();
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onPause() {
super.onPause();
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
if (key.equals("showLevel")) {
mMyView.showLevel(prefs.getBoolean("showLevel", false));
}
}
}
但我的應用程序崩潰時我上的複選框挖掘與showLevel
關鍵。在Android Studio中,我從這一行開始得到NullPointerException:mLevel.setVisibility(View.VISIBLE);
當試圖從另一個類而不是MyView修改視圖(它工作得很好)。
任何幫助,高度讚賞。
更新:我在MyView
裏添加了一個showLevel()
方法,並嘗試在服務中訪問它。加工。
片段的onCreateView()方法是什麼? – Breavyn
這就是我在'MainActivity'中所具有的,沒有'onCreateView()'。無論如何,我無法修改我的其他課程中的視圖,而不僅僅是主視圖。 –
在'activity_main.xml'中聲明瞭'levelTextView'嗎? – Breavyn