在MainActivity
我注册了OnSharedPreferenceChangeListener
在onCreate
和UnRegistering在onDestroy
。即使我改变偏好设置,回拨也不会在MainActivity
中被解雇。我关注了堆栈溢出和Android文档中的其他问题,但所有这些解决方案都不适合我。OnSharedPreferenceChangeListener没有被触发
其实,我想知道,如果我们可以调试,为什么我的回调是没有得到所谓的或任何其他解决方案可能会有所帮助。
public class MainActivity extends AppCompatActivity {
ImageAdapter imageAdapter;
ArrayList<String> posterPaths = new ArrayList<>();
private SharedPreferences.OnSharedPreferenceChangeListener preferenceChangeListener =
new SharedPreferences.OnSharedPreferenceChangeListener(){
@Override
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
if (key.equals(getString(R.string.pref_order_key))) {
fetchImagesIfOnline();
}
}
};
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.main,menu);
return true;
}
@Override
protected void onDestroy() {
super.onDestroy();
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
preferences.unregisterOnSharedPreferenceChangeListener(preferenceChangeListener);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch(id) {
case R.id.action_settings:
startActivity(new Intent(this, Settings.class));
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
preferences.registerOnSharedPreferenceChangeListener(preferenceChangeListener);
imageAdapter = new ImageAdapter(getApplicationContext(), posterPaths);
GridView gridview = (GridView) findViewById(R.id.movie_grid);
gridview.setAdapter(imageAdapter);
gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String image = (String) parent.getItemAtPosition(position);
Intent movieDetailsIntent = new Intent(getApplicationContext(), MovieDetails.class);
movieDetailsIntent.putExtra("image",(String) imageAdapter.getItem(position));
startActivity(movieDetailsIntent);
}
});
fetchImagesIfOnline();
}
public boolean isOnline() {
ConnectivityManager cm =
(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
return netInfo != null && netInfo.isConnectedOrConnecting();
}
public void fetchImagesIfOnline() {
if (isOnline())
{
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
String sortOrder = preferences.getString(getString(R.string.pref_order_key),getString(R.string.pref_order_toprated));
Log.d("DEBUG","Sort order is " + sortOrder);
DownloadTask downloadTask;
downloadTask = new DownloadTask(imageAdapter,posterPaths);
downloadTask.execute(sortOrder);
}
}
@Override
public View onCreateView(View parent, String name, Context context, AttributeSet attrs) {
return super.onCreateView(parent, name, context, attrs);
}
}
你可以发布你的代码吗? –
我在这里发布了'MainActivity'的代码。 –