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);
    }
}
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();
    }
}
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;
    }
}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. 
		