Как я могу изменить атрибуты в макете деятельности из другого класса? - PullRequest
0 голосов
/ 14 мая 2018

У меня есть основное занятие, которое обрабатывает щелчки в навигационном ящике. затем он вызывает другой класс 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;
    }
}

1 Ответ

0 голосов
/ 14 мая 2018

Простым решением было бы то, что вы можете просто определить свои представления в своем классе MainActivity.class как

static TextView textView
static RecyclerView recyclerview

, чтобы вы могли получить к нему доступ, например, MainActivity.textView или MainActivity.recyclerview

Ноиспользование статических переменных приведет к утечке памяти.

Так что вы можете попробовать этот другой подход.Вы можете создавать методы получения для ваших представлений.

Просто определите в своей MainActivity

public getTextView(){
    return this.textView
}

public getRecyclerView(){
    return this.recyclerview
}

Позже во втором классе:

MainActivity mainActivity = new MainActivity();
TextView textView = mainActivity.getTextView();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...