MainActivity
OnSharedPreferenceChangeListener
をonCreate
に登録し、登録解除をonDestroy
に登録しています。私が設定を変更している場合でも、コールバックはMainActivity
で解雇されていません。スタックオーバーフローやAndroidドキュメントに関する他の質問に続きましたが、これらのソリューションはすべて私のために働いていません。OnSharedPreferenceChangeListenerが起動しない
実際には、コールバックが呼び出されない理由やその他役立つ解決策をデバッグできるかどうかを知りたいと思います。あなたはリスナー
prefs.registerOnSharedPreferenceChangeListener(listener);
を登録onCreate
に
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'のコードを掲示しました。 –