Java 如何从不同的班级更改活动布局中的属性?

Java 如何从不同的班级更改活动布局中的属性?,java,android,android-layout,android-studio,Java,Android,Android Layout,Android Studio,我的主要活动是处理导航抽屉中的点击。然后它调用一个不同的Java类来完成其余的工作。将主代码分开。这是我的主要活动代码 public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener { ViewFlipper flip_it; //flip tussen screens = flip_it DrawerLayout dr

我的主要活动是处理导航抽屉中的点击。然后它调用一个不同的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); 
我将如何处理这个问题,因为布局在前景中仍然处于活动状态。我只需要关于如何从当前正在运行的类中与当前布局通信的帮助

谢谢

编辑:

在我的主要活动中添加了getter,但是现在我的RecyclerView抛出了一个NullPointerException。请看下面我是如何在第二节课上使用我的getter的

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;
    }
}
二等舱:
公共类列表\u活动实现NavigationView.OnNavigationItemSelectedListener{
MyRecycleServiceAdapter mAdapter;
私有列表录制=新建ArrayList();
视图翻转器翻转它;
公共无效maak_die_lys_vir_al_die_录音(){
mAdapter=newmyRecycleServiceAdapter(录制);//要声明的对象
MainActivity main=新的MainActivity();
main.getRecyclerView().addItemDecoration(新的DividerItemDecoration(this,LinearLayoutManager.VERTICAL));//
main.getRecyclerView().addOnItemTouchListener(新的RecyclerTouchListener(getApplicationContext(),main.getRecyclerView(),新的ClickListener(){
@凌驾
公共void onClick(视图,int位置){
录制=录制。获取(位置);
if(recording.getCaID()==0){
toasty();//美味的om te加载更多todo加载更多代码skryf
}否则{
flip_it=findviewbyd(R.id.vf);
flip_it.setDisplayedChild(3);
TextView player_tema=findviewbyd(R.id.player_tema)/
player_tema.setText(recording.getTema());
按钮播放暂停=findViewById(R.id.pauseplay);
playpause.setText(R.string.pause_按钮);
}
}
仅长按公共无效(视图,int位置){
} 
}));
RecyclerView.LayoutManager mLayoutManager=新的LinearLayoutManager(getApplicationContext());
main.getRecyclerView().setLayoutManager(mLayoutManager);
main.getRecyclerView().setAdapter(mAdapter);
录音。清除();
添加项目(“Ds.Braam Smith”,“Ons is hier Vandag”,2,4,“1992.11.21”);
收藏。反向(录音);
增加项目(“不适用”、“0”、0、0、0”);
}
公共空间烤面包店(){
Toast.makeText(这是“加载更多…”,Toast.LENGTH_LONG.show();
} 
public void add_项(字符串domine、字符串tema、int CaID、int preeknomer、字符串日期){
记录=新记录(多米尼、特马、凯德、普里克诺默、日期);
录音。添加(录音);
mAdapter.notifyDataSetChanged();
}
公共布尔值onNavigationItemSelected(@NonNull MenuItem item){
返回true;
}
}

一个简单的解决方案是,您只需在MainActivity.class中将视图定义为

static TextView textView
static RecyclerView recyclerview
这样您就可以像MainActivity.textView或MainActivity.recyclerview一样访问它

但是使用静态变量会导致内存泄漏

所以你可以尝试另一种方法。 您可以为视图创建getter setter

只需在主活动中定义

public getTextView(){
    return this.textView
}

public getRecyclerView(){
    return this.recyclerview
}
稍后在第二节课:

MainActivity mainActivity = new MainActivity();
TextView textView = mainActivity.getTextView();

您能更好地解释一下“现在在我的Java类中,我正在调用我想更改布局上的内容,这些内容是在主活动中调用的,比如更改按钮文本。”?好的,对不起,基本上我的主要活动是设置内容视图。然后我从主要活动中呼叫另一个班级。例如,我想更改我调用的第二个类中的按钮文本。您想访问第二个类中主要活动的假设文本视图吗?这样你就可以更改文本了?基本上是的,但不仅仅是文本视图。。。我还想向“回收器”视图添加内容。您是否尝试将其设置为静态?
public
getters似乎是一个更好的选择,您也可以使用
static视图。但为了让他明白我的回答是肯定的,但这最终会给他留下更多的问题,而不是解决的问题,这在我看来是个不好的建议。我理解你的担心。首先让我看看他想要什么?因为他的问题不太清楚。稍后将使用getter和setter更新答案。我在recycler视图上收到一个空指针异常。我怎样才能解决这个问题?
MainActivity mainActivity = new MainActivity();
TextView textView = mainActivity.getTextView();