Hi zusammen,
ich habe eine MainActivity mit einem RecyclerView, welcher Daten aus einer SQLite-Datenbank anzeigt. Beim Klick auf einen Datensatz soll sich eine DetailActivity öffnen, und weitere Details zu dem jeweiligen Datensatz anzeigen.
Ich habe auf der DetailActivity ein TabLayout, da die Detaildaten auf 3 Tabs angezeigt werden sollen. Für jeden Tab existiert ein Fragment.
Wenn ich nun aber einen Datensatz in der MainActivity anklicke, öffnet sich zwar das fragment, aber ohne Daten. Im Logfile sieht man, dass der OnCreateView des fragments insgesamt 3x aufgerufen wird. Beim ersten mal ohne Werte, beim 2. Mal werden die Werte übergeben, beim 3. Mal dann wieder leer.
Kann mir jemand sagen, warum das fragment 3x aufgerufen wird, und wie ich das beheben kann?
Danke euch!
Meine MainActivity:
}
mNoteRecyclerAdapter.notifyDataSetChanged();
}
});
}
private void initRecyclerView() {
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(linearLayoutManager);
VerticalSpacingItemDecorator itemDecorator = new VerticalSpacingItemDecorator((10));
mRecyclerView.addItemDecoration(itemDecorator);
mNoteRecyclerAdapter=new NotesRecyclerAdapter(mNotes, this);
mRecyclerView.setAdapter(mNoteRecyclerAdapter);
}
@Override
public void onNoteClick(int position) {
Intent intent = new Intent(this, NotenDetailsActivity.class);
intent.putExtra("selected_note", mNotes.get(position));
startActivity(intent);
}
}
Alles anzeigen
NotenDetailsActivity:
public class NotenDetailsActivity extends AppCompatActivity implements View.OnClickListener{
// ui components
private TextView mViewTitle;
private TextView mViewKomponist;
private TextView mViewArrangeur;
private TextView mViewVerlag;
private RelativeLayout mBackArrowContainer;
private ImageButton mBackArrow;
// vars
private Note mInitialNote;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_noten_details);
mViewTitle = findViewById(R.id.note_toolbar_title);
TabLayout tabLayout = findViewById(R.id.tablayout);
TabItem tabChats = findViewById(R.id.tabPage1);
TabItem tabStatus = findViewById(R.id.tabPage2);
TabItem tabCalls = findViewById(R.id.tabPage3);
ViewPager viewPager = findViewById(R.id.viewPager);
PageAdapter pageAdapter = new PageAdapter(getSupportFragmentManager(), tabLayout.getTabCount());
viewPager.setAdapter(pageAdapter);
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
mBackArrow = findViewById(R.id.toolbar_back_arrow);
mBackArrowContainer = findViewById(R.id.back_arrow_container);
setListeners();
if(getIntent().hasExtra("selected_note")) {
setNoteProperties();
}
}
private void setListeners() {
mBackArrow.setOnClickListener(this);
}
public void setNoteProperties() {
mInitialNote = getIntent().getParcelableExtra("selected_note");
mViewTitle.setText(mInitialNote.getTitle());
Bundle bundle = new Bundle();
bundle.putString("komponist", mInitialNote.getKomponist());
Tab1Fragment fragment = new Tab1Fragment();
fragment.setArguments(bundle);
getSupportFragmentManager().beginTransaction().replace(R.id.fragment1, fragment).commit();
}
@Override
public void onClick(View view) {
finish();
}
@Override
public void onBackPressed() {
super.onBackPressed();
}
}
Alles anzeigen
Tab1Fragment:
public class Tab1Fragment extends Fragment {
public Tab1Fragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_tab1, container, false);//Inflate Layout
Log.d("", "onCreateView: TRIGGERED");
TextView mViewKomponist = view.findViewById(R.id.note_komponist);
if (getArguments() != null) {
String tKomponist = getArguments().getString("komponist");
Log.d("", "onCreateView: " + tKomponist);
mViewKomponist.setText(tKomponist);
}
else
{
Log.d("", "onCreateView: NOTHING");
}
return view;
}
}
Alles anzeigen
Und das Logfile, in dem man erkennt, dass das fragment 3x aufgerufen wird:
D/EGL_emulation: eglMakeCurrent: 0xae834ca0: ver 2 0 (tinfo 0xae8393f0)
D/OpenGLRenderer: Enabling debug mode 0
D/EGL_emulation: eglMakeCurrent: 0xae834ca0: ver 2 0 (tinfo 0xae8393f0)
D/: onCreateView: TRIGGERED
onCreateView: NOTHING
D/: onCreateView: TRIGGERED
onCreateView: Grünbauer, Wolfgang
D/: onCreateView: TRIGGERED
onCreateView: NOTHING
D/EGL_emulation: eglMakeCurrent: 0xae834ca0: ver 2 0 (tinfo 0xae8393f0)
I/Choreographer: Skipped 32 frames! The application may be doing too much work on its main thread.
Alles anzeigen