У меня есть MainActivity
с tabhost, tabhost
имеет три вкладки (Fragment
).SecondTab имеет RecyclerView
.В MainActivity
используйте кнопку ActionBar, чтобы перейти к другому действию (NewClass) и добавить новые значения (MainActivity по-прежнему открыта).После добавления новых значений я хочу вернуться к MainActivity
и обновить RecyclerView
для отображения новых значений.Я использую responseToPublishedEvent () метод, чтобы обновить RecyclerView, но не работает.Я не смог решить свою проблему с помощью ответов.
MainActivity
public class MainActivity extends AppCompatActivity implements Publisher{
private Listener listener;
protected void onCreate(Bundle savedInstanceState) {
//. . .
public void onClick(View view)
{
Intent intent = new Intent();
intent.setClass(this , NewClass.class);
startActivityForResult(intent , 1);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 1 && resultCode == RESULT_OK)
{
if(data != null)
{
listener.reactToPublishedEvent();
}
}
}
@Override
public void setListener(SecondTab listener) {
this.listener = listener;
}
interface Listener{
void reactToPublishedEvent();
}}
NewClass
boolean check = database.SaveClass(className, classDay, classTimeStart, classTimeEnd, Integer.parseInt(classNumber), uniName , checkMidTerm , checkEndTerm , checkPractical , checkProject , checkConference);
if(check)
{
Intent intent = new Intent();
setResult(RESULT_OK , intent);
finish();
}
SecondTab:
public class SecondTab extends Fragment implements MainActivity.Listener{
private RecyclerView recyclerView;
private DatabaseHandler database;
private RecyclerViewAdapter recyclerAdapter;
private List<ClassTable> classData;
@Nullable
@Override
public View onCreateView(final LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_second_tab, container, false);
database = new DatabaseHandler(getContext());
recyclerView = view.findViewById(R.id.recyclerView_SecondTab);
classData = new ArrayList<>();
prepareAdapter();
return view;
}
private void prepareAdapter()
{
classData = database.getClassData();//Receive table data
recyclerAdapter = new RecyclerViewAdapter(this , getContext(), classData);
recyclerView.setAdapter(recyclerAdapter);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
if(context instanceof Publisher){
((Publisher)context).setListener(this);
}
}
@Override
public void reactToPublishedEvent() {
recyclerAdapter.notifyDataSetChanged();//this line is not correct
}
Издатель
public interface Publisher {
void setListener(SecondTab listener);}