У меня есть основное занятие, которое обрабатывает щелчки в навигационном ящике. затем он вызывает другой класс Java для выполнения остальной части работы. сохраняя основной код отдельно. Вот мой основной код активности.
public class MainActivity extends AppCompatActivity implements
NavigationView.OnNavigationItemSelectedListener {
ViewFlipper flip_it; //flip tussen screens = flip_it
DrawerLayout drawer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
drawer = findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this,
drawer, toolbar, R.string.navigation_drawer_open,
R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
toggle.syncState();
flip_it = findViewById(R.id.vf);
flip_it.animate();
NavigationView navigationView = findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
}
, а затем OnNavigationClickListeners с намерением запустить другой класс Java
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
int id = item.getItemId();
if (id == R.id.nav_rec) {
flip_it.setDisplayedChild(2); //Recordings
drawer.closeDrawer(GravityCompat.START);
Intent intent=new Intent(MainActivity.this,list_recordings.class);
startActivity(intent);
}
Теперь в моем классе Java я звоню, я хочу изменить материал в макете, который вызывался в основном действии, например текст кнопки изменения.
TextView player_tema = findViewById(R.id.player_tema); //todo declare bo
player_tema.setText(recording.getTema());
Button playpause = findViewById(R.id.pauseplay);
playpause.setText(R.string.pause_button);
Как бы я мог справиться с этим, поскольку макет все еще активен на переднем плане. Мне просто нужна помощь о том, как связаться с текущим макетом из класса, который сейчас работает.
Спасибо
редактирование:
public RecyclerView getRecyclerView(){
return recyclerView;
}
добавил геттер в мою основную деятельность, но теперь мой RecyclerView генерирует исключение NullPointerException. Пожалуйста, посмотрите ниже, как я использую свой геттер во втором классе.
MainActivity main = new MainActivity();
main.getRecyclerView().addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.VERTICAL));
main.getRecyclerView().addOnItemTouchListener(new RecyclerTouchListener(getApplicationContext(), main.getRecyclerView(), new ClickListener() {
Полный код:
Main_Activity:
public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
ViewFlipper flip_it;
DrawerLayout drawer;
RecyclerView recyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
drawer = findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
toggle.syncState();
flip_it = findViewById(R.id.vf);
flip_it.animate();
NavigationView navigationView = findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
}
@Override
public void onBackPressed() {
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
}
if (flip_it.getDisplayedChild() == 3) {
flip_it.setDisplayedChild(2);
}
}
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
if (id == R.id.nav_rec) {
flip_it.setDisplayedChild(2); //Recordings
recyclerView = findViewById(R.id.recycler_view);
drawer.closeDrawer(GravityCompat.START);
list_recordings lr = new list_recordings();
lr.maak_die_lys_vir_al_die_recordings();
}
if (id == R.id.nav_qanda) {
flip_it.setDisplayedChild(1);
drawer.closeDrawer(GravityCompat.START);
}
if (id == R.id.nav_news){
flip_it.setDisplayedChild(4);
drawer.closeDrawer(GravityCompat.START);
}
return true;
}
//some getters and setters
public RecyclerView getRecyclerView(){
return recyclerView;
}
}
и полный код для второго класса:
Second Class:
public class list_recordings extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener{
MyRecyclerViewAdapter mAdapter;
private List<Recording> recordings = new ArrayList<>();
ViewFlipper flip_it;
public void maak_die_lys_vir_al_die_recordings() {
mAdapter = new MyRecyclerViewAdapter(recordings);//todo declare bo
MainActivity main = new MainActivity();
main.getRecyclerView().addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.VERTICAL)); //
main.getRecyclerView().addOnItemTouchListener(new RecyclerTouchListener(getApplicationContext(), main.getRecyclerView(), new ClickListener() {
@Override
public void onClick(View view, int position) {
Recording recording = recordings.get(position);
if (recording.getCaID() == 0) {
toasty(); //tasty om te load more todo load more code skryf
} else {
flip_it = findViewById(R.id.vf);
flip_it.setDisplayedChild(3);
TextView player_tema = findViewById(R.id.player_tema); /
player_tema.setText(recording.getTema());
Button playpause = findViewById(R.id.pauseplay);
playpause.setText(R.string.pause_button);
}
}
public void onLongClick(View view, int position) {
}
}));
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
main.getRecyclerView().setLayoutManager(mLayoutManager);
main.getRecyclerView().setAdapter(mAdapter);
recordings.clear();
add_item("Ds.Braam Smith", "Ons is hier Vandag", 2, 4, "1992.11.21");
Collections.reverse(recordings);
add_item("n/a", "0", 0, 0, "0");
}
public void toasty() {
Toast.makeText(this, "Loading more...", Toast.LENGTH_LONG).show();
}
public void add_item(String dominie, String tema, int CaID, int preeknommer, String date) {
Recording recording = new Recording(dominie, tema, CaID, preeknommer, date);
recordings.add(recording);
mAdapter.notifyDataSetChanged();
}
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
return true;
}
}