2 回答

TA貢獻2016條經驗 獲得超9個贊
從你的MainActivity調用中Settings使用startActivityForResult()方法
例如:
if (id == R.id.action_settings){
Intent intent = new Intent(getApplicationContext(), Settings.class);
startActivityForResult(intent,1);
return true;
}
在您Settings Activity設置要返回的數據MainActivity。如果您不想返回,請不要設置。
resetButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent returnIntent = new Intent();
setResult(Activity.RESULT_OK,returnIntent);
finish();
}
});
現在您main activity必須為該onActivityResult()方法編寫以下代碼。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) {
if(resultCode == Activity.RESULT_OK){
// here you can sorting your recyclerview
sortEmails(getEmails());
}
if (resultCode == Activity.RESULT_CANCELED) {
//Write your code if there's no result
}
}
}
其他方式
如果您不想在單擊setting activity后終止resetbutton,則可以使用shared preference.
例子
public class SharedPrefManager{
private static SessionManager jInstance;
private final SharedPreferences prefs;
private final SharedPreferences.Editor editor;
// private constructor to force use of
// getInstance() to create Singleton object
private SharedPrefManager(Context context) {
prefs = context.getSharedPreferences("Your_Preference_name", Context.MODE_PRIVATE);
editor = prefs.edit();
}
// create the instance when it is accessed for the first time
public static synchronized SharedPrefManager getInstance(Context context) {
if (jInstance != null) {
return jInstance;
} else {
jInstance = new SharedPrefManager(context);
return jInstance;
}
}
public void isSortedByEmail(boolean emailSorting){
editor.putString("emailSorting",emailSorting);
editor.apply();
}
public boolean isSortedByEmail(){
return prefs.getBoolean("emailSorting",false);
}
}
在你的setting activity你必須像下面這樣做
resetButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SharedPrefManager.getInstance(context).isSortedByEmail(true);
}
});
而在你的main activity內心onStart()
@Override
protected void onStart(){
super.onStart();
if(SharedPrefManager.getInstance(context).isSortedByEmail()){
// here you can sorting your recyclerview
sortEmails(getEmails());
}
}

TA貢獻1853條經驗 獲得超6個贊
如果您仍然想從設置活動刷新回收器視圖,請使用此庫。
https://github.com/greenrobot/EventBus
實施鏈接
https://stackoverflow.com/a/40987755/6452937
您無法在您提到的活動之間進行通信。

TA貢獻1871條經驗 獲得超8個贊
您在“設置”中進行了初始化,但該參考與顯示的MainActivity實際參考不同。MainActivity我發現適配器中與數據集相關的一些其他問題需要改進。Settings之后,您需要找到一種可以將過濾器信息從 發送到的方法MainActivity。有多種方法,但我建議您在您的情況下使用 SharedPreference。
您Settings應該將過濾器設置放入SharedPreference并獲取它們的值MainActivity
public class Settings extends AppCompatActivity {
SharedPreferences.Editor editSettings;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
editSettings = getSharedPreferences("filter", Context.MODE_PRIVATE).edit();
resetButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
editSettings.putBoolean("reset", true).apply();
}
});
}
}
在進行Adapter以下更改時,
public class RecyclerViewAdapdter extends RecyclerView.Adapter<RecyclerViewAdapdter.ViewHolder> {
private static final String TAG = "RecyclerViewAdapter";
private ArrayList<String> mImages = new ArrayList<>();
private ArrayList<String> mEmailTitle = new ArrayList<>();
private ArrayList<String> mEmailHeader = new ArrayList<>();
private ArrayList<String> mEmailContent = new ArrayList<>();
private Context mContext;
public RecyclerViewAdapdter(Context mContext) {
this.mContext = mContext;
}
public void submitData((ArrayList<String> mImages, ArrayList<String> mEmailTitle, ArrayList<String> mEmailHeader, ArrayList<String> mEmailContent) {
this.mImages.clear();
this.mEmailTitle.clear();
this.mEmailHeader.clear();
this.mEmailContent.clear();
this.mImages.addAll(mImages);
this.mEmailTitle.addAll(mEmailTitle);
this.mEmailHeader.addAll(mEmailHeader);
this.mEmailContent.addAll(mEmailContent);
notifyDataSetChanged()
}
...
}
在MainActivity覆蓋onResume()和更新列表中,當 SharedPreference 的值為 true 時,
public class MainActivity extends AppCompatActivity {
...
SharedPreferences spSettings;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
spSettings = getSharedPreferences("filter", Context.MODE_PRIVATE);
...
}
@Override
protected void onResume() {
super.onResume();
boolean reset = spSettings.getBoolean("reset", false);
if(reset) {
ArrayList<AssignmentEmail> emailArray = getEmails();
sortEmails(emailArray);
}
}
private void initRecyclerView(){
...
adapter = new RecyclerViewAdapdter(mContent,this);
adapter.submitData(mImageurls,mNames,mHeaders);
...
}
public void sortEmails(ArrayList<AssignmentEmail> arrayOfEmails){
...
adapter.submitData(mImageurls,mNames,mHeaders,mContent);
}
}
添加回答
舉報