首页 > 解决方案 > Multiple layout setVisibility wont show correct layout after getting pressed on certain layout

问题描述

I have a layout in which there are several other layouts by including in XML, I add some textviews as buttons to change the view layouts from one layout to another.

I display each layout with the setVisibility method between layouts, with setOnClickListener in the textview.

The problem is just after finishing displaying the "profile" layout and trying to display the "about us" layout, the system displays a "profile" layout instead of the "about us" layout.

Here is myJava

public class SettingMenu extends AppCompatActivity {

    View userProfile, settingLayout, userFavorite, UserEditProfile, aboutUS, contactUS, ProgressBar;

    TextView user_username, user_password, user_email, user_ID, tvVisi, tvMisi, tvMitra, tvIsiVisi, tvIsiMisi, tvIsiMitra;

    EditText ETUname, ETPass, ETEmail;

    ImageView ivBack, ivEditUProfile;

    Button bSetProfile, bSetFavorite, bLogout, BSave, BCancel, bSetAbout, bSetContact;

    ArrayList<HashMap<String, String>> list_data;

    SessionManager sessionManager;

    int x = 0;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_setting);

        sessionManager = new SessionManager(this);
        sessionManager.checkLogin();

        settingLayout = findViewById(R.id.SettingLayout);

        userProfile = findViewById(R.id.user_profile);
        userProfile.setVisibility(View.GONE);

        aboutUS = findViewById(R.id.AboutUs);
        aboutUS.setVisibility(View.GONE);

        ivBack = findViewById(R.id.IVSettingBack);
        ivBack.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if (x == 0){

                    Intent i = new Intent(SettingMenu.this, MainActivity.class);

                    startActivity(i);

                    finish();

                }
                else if (x == 1){

                    x = 0;

                    UserEditProfile.setVisibility(View.GONE);

                    settingLayout.setVisibility(View.VISIBLE);

                }
                else if (x == 2){

                    x = 0;

                    userFavorite.setVisibility(View.GONE);

                    settingLayout.setVisibility(View.VISIBLE);

                }
                else if (x == 3) {

                    x = 0;

                    aboutUS.setVisibility(View.GONE);

                    settingLayout.setVisibility(View.VISIBLE);

                }

                else if (x == 4){

                    x = 0;

                    settingLayout.setVisibility(View.VISIBLE);

                    contactUS.setVisibility(View.GONE);

                }

            }
        });

        bSetAbout = findViewById(R.id.bSettingAbout);
        bSetAbout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                aboutUS.setVisibility(View.VISIBLE);
                settingLayout.setVisibility(View.GONE);

                AboutUs();

                x = x + 3;

            }
        });

        bSetContact = findViewById(R.id.bSettingContact);
        bSetContact.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {




            }
        });

        bSetProfile = findViewById(R.id.bSettingProfile);
        bSetProfile.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                userProfile.setVisibility(View.VISIBLE);
                settingLayout.setVisibility(View.GONE);

                UserProfile();

                x = x + 1;

            }
        });

        bSetFavorite = findViewById(R.id.bSettingFav);
        bSetFavorite.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });

        bLogout = findViewById(R.id.bLogout);
        bLogout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                sessionManager.logout();

            }
        });
    }

    private void UserProfile() {

        UserEditProfile = findViewById(R.id.EditParam);
        UserEditProfile.setVisibility(View.GONE);

        ETUname = findViewById(R.id.eTUsername);
        ETUname.setVisibility(View.GONE);

        ETPass = findViewById(R.id.eTPassword);
        ETPass.setVisibility(View.GONE);

        ETEmail = findViewById(R.id.eTEmail);
        ETEmail.setVisibility(View.GONE);

        user_username = findViewById(R.id.tVUsername);
        user_email = findViewById(R.id.tVEmail);
        user_password = findViewById(R.id.tVPassword);
        user_ID = findViewById(R.id.tVUser_userID);

        final HashMap<String , String> user = sessionManager.getUserDetail();

        if (user.get(sessionManager.USERNAME).equals("")){

            user_username.setText(R.string.empty_username);

        }
        else {

            user_username.setText(user.get(sessionManager.USERNAME));

        }

        user_email.setText(user.get(sessionManager.EMAIL));

        user_password.setText(user.get(sessionManager.PASSWORD));

        user_ID.setText("USER ID #" + user.get(sessionManager.UserID));

        ivEditUProfile = findViewById(R.id.iVEdit);
        ivEditUProfile.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                user_username.setVisibility(View.GONE);
                user_email.setVisibility(View.GONE);
                user_password.setVisibility(View.GONE);

                ETEmail.setVisibility(View.VISIBLE);
                ETEmail.setText(user.get(sessionManager.EMAIL));

                ETPass.setVisibility(View.VISIBLE);
                ETPass.setText(user.get(sessionManager.PASSWORD));

                ETUname.setVisibility(View.VISIBLE);
                ETUname.setText(user.get(sessionManager.USERNAME));

                UserEditProfile.setVisibility(View.VISIBLE);

            }
        });

        BSave = findViewById(R.id.bSave);
        BSave.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String editedUsername = ETUname.getText().toString();
                String editedEmail = ETEmail.getText().toString();
                String editedPass = ETPass.getText().toString();

                if (editedUsername.equals(user_username.getText().toString()) &&
                        editedEmail.equals(user_email.getText().toString()) &&
                        editedPass.equals(user_password.getText().toString())){

                    Cancel();

                }
                else {

                    SaveChangedProfile(editedEmail, editedUsername, editedPass);

                }
            }
        });

        BCancel = findViewById(R.id.bCancel);
        BCancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Cancel();
            }
        });

    }

    private void SaveChangedProfile(final String EditedEmail, final String EditedUsername, final String EditedPassword) {

        //kirim langsung semua

    }

    private void AboutUs() {

        list_data = new ArrayList<>();

        ProgressBar = findViewById(R.id.progressLayout);
        ProgressBar.setVisibility(View.VISIBLE);

        tvVisi = findViewById(R.id.TvVisi);
        tvMisi = findViewById(R.id.TvMisi);
        tvMitra = findViewById(R.id.TvMitra);

        tvVisi.setText("VISI");
        tvMisi.setText("MISI");
        tvMitra.setText("MITRA");

        tvIsiVisi = findViewById(R.id.TvIsiVisi);
        tvIsiMisi = findViewById(R.id.TvIsiMisi);
        tvIsiMitra = findViewById(R.id.TvIsiMitra);

        final String  URL_about =  "https://x";

        final StringRequest stringRequest = new StringRequest(Request.Method.GET, URL_about, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                try {
                    //Take json Object
                    JSONObject jsonObject = new JSONObject(response);

                    //Take Parameter success from php
                    String success = jsonObject.getString("success");

                    //get Array tempat from php
                    JSONArray jsonArray = jsonObject.getJSONArray("about");

                    //traversing through all the object
                    for (int i = 0; i < jsonArray.length(); i++) {

                        //getting product object from json array
                        JSONObject detail = jsonArray.getJSONObject(i);

                        //adding the product to HashMap
                        HashMap<String, String> map = new HashMap<>();
                        map.put("visi",  detail.getString("visi"));
                        map.put("misi",  detail.getString("misi"));
                        map.put("mitra",  detail.getString("mitra"));
                        list_data.add(0, map);
                    }

                    //Put Picture Location to Glide (function) and show it on layout item ("Imageview")
                    /*Glide.with(getApplicationContext())
                            .load(list_data.get(0).get("foto"))
                            .into(Imageview);*/

                    //Put each data in each Layout item
                    tvIsiVisi.setText(list_data.get(0).get("visi"));
                    tvIsiMisi.setText(list_data.get(0).get("misi"));
                    tvIsiMitra.setText(list_data.get(0).get("mitra"));

                    ProgressBar.setVisibility(View.GONE);

                }
                catch (JSONException e) {
                    e.printStackTrace();
                    Toast.makeText(SettingMenu.this, "Error : " +e.toString(), Toast.LENGTH_SHORT).show();
                    AboutUs();
                }
            }
        },
                //Give something in these case toast to notice if server gone nuts. (it's only basic got no more time to detailed it)
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(getApplicationContext(), "Something Wrong :/",Toast.LENGTH_LONG).show();
                    }
                });

        //adding our stringrequest to queue
        Volley.newRequestQueue(this).add(stringRequest);

    }

    private void Cancel() {

        user_username.setVisibility(View.VISIBLE);
        user_email.setVisibility(View.VISIBLE);
        user_password.setVisibility(View.VISIBLE);

        ETUname.setText("");
        ETUname.setVisibility(View.GONE);

        ETPass.setText("");
        ETPass.setVisibility(View.GONE);

        ETEmail.setText("");
        ETEmail.setVisibility(View.GONE);

        UserEditProfile.setVisibility(View.GONE);

    }
}

UPDATE

I change my method from setVisibility to setContentView

here's the code. it works fine for me

public class SettingMenu extends AppCompatActivity {

    View UserEditProfile, ProgressBar;

    TextView user_username, user_password, user_email, user_ID, tvVisi, tvMisi, tvMitra, tvIsiVisi, tvIsiMisi, tvIsiMitra;

    EditText ETUname, ETPass, ETEmail;

    ImageView ivBack, ivEditUProfile;

    Button bSetProfile, bSetFavorite, bLogout, BSave, BCancel, bSetAbout, bSetContact;

    ArrayList<HashMap<String, String>> list_data;

    SessionManager sessionManager;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_setting);

        sessionManager = new SessionManager(this);
        sessionManager.checkLogin();

        ControllerHome();

    }

    private void ControllerHome() {

        setContentView(R.layout.activity_setting);

        ivBack = findViewById(R.id.IVSettingBack);
        ivBack.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Intent i = new Intent(SettingMenu.this, MainActivity.class);

                startActivity(i);

                finish();

            }
        });

        bSetAbout = findViewById(R.id.bSettingAbout);
        bSetAbout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                AboutUs();

            }
        });

        bSetContact = findViewById(R.id.bSettingContact);
        bSetContact.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {




            }
        });

        bSetProfile = findViewById(R.id.bSettingProfile);
        bSetProfile.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                UserProfile();

            }
        });

        bSetFavorite = findViewById(R.id.bSettingFav);
        bSetFavorite.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });

        bLogout = findViewById(R.id.bLogout);
        bLogout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                sessionManager.logout();

            }
        });

    }

    private void UserProfile() {
        setContentView(R.layout.setting_user_profile);

        UserEditProfile = findViewById(R.id.EditParam);
        UserEditProfile.setVisibility(View.GONE);

        ETUname = findViewById(R.id.eTUsername);
        ETUname.setVisibility(View.GONE);

        ETPass = findViewById(R.id.eTPassword);
        ETPass.setVisibility(View.GONE);

        ETEmail = findViewById(R.id.eTEmail);
        ETEmail.setVisibility(View.GONE);

        user_username = findViewById(R.id.tVUsername);
        user_email = findViewById(R.id.tVEmail);
        user_password = findViewById(R.id.tVPassword);
        user_ID = findViewById(R.id.tVUser_userID);

        final HashMap<String , String> user = sessionManager.getUserDetail();

        if (user.get(sessionManager.USERNAME).equals("")){

            user_username.setText(R.string.empty_username);

        }
        else {

            user_username.setText(user.get(sessionManager.USERNAME));

        }

        user_email.setText(user.get(sessionManager.EMAIL));

        user_password.setText(user.get(sessionManager.PASSWORD));

        user_ID.setText("USER ID #" + user.get(sessionManager.UserID));


        ivBack = findViewById(R.id.IVSettingBack);
        ivBack.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                ControllerHome();

            }
        });

        ivEditUProfile = findViewById(R.id.iVEdit);
        ivEditUProfile.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                user_username.setVisibility(View.GONE);
                user_email.setVisibility(View.GONE);
                user_password.setVisibility(View.GONE);

                ETEmail.setVisibility(View.VISIBLE);
                ETEmail.setText(user.get(sessionManager.EMAIL));

                ETPass.setVisibility(View.VISIBLE);
                ETPass.setText(user.get(sessionManager.PASSWORD));

                ETUname.setVisibility(View.VISIBLE);
                ETUname.setText(user.get(sessionManager.USERNAME));

                UserEditProfile.setVisibility(View.VISIBLE);

            }
        });

        BSave = findViewById(R.id.bSave);
        BSave.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String editedUsername = ETUname.getText().toString();
                String editedEmail = ETEmail.getText().toString();
                String editedPass = ETPass.getText().toString();

                if (editedUsername.equals(user_username.getText().toString()) &&
                        editedEmail.equals(user_email.getText().toString()) &&
                        editedPass.equals(user_password.getText().toString())){

                    Cancel();

                }
                else {

                    SaveChangedProfile(editedEmail, editedUsername, editedPass);

                }
            }
        });

        BCancel = findViewById(R.id.bCancel);
        BCancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Cancel();
            }
        });

    }

    private void SaveChangedProfile(final String EditedEmail, final String EditedUsername, final String EditedPassword) {

        //kirim langsung semua

    }

    private void AboutUs() {
        setContentView(R.layout.about_us);

        list_data = new ArrayList<>();

        ProgressBar = findViewById(R.id.progressLayout);
        ProgressBar.setVisibility(View.VISIBLE);

        tvVisi = findViewById(R.id.TvVisi);
        tvMisi = findViewById(R.id.TvMisi);
        tvMitra = findViewById(R.id.TvMitra);

        tvVisi.setText("VISI");
        tvMisi.setText("MISI");
        tvMitra.setText("MITRA");

        tvIsiVisi = findViewById(R.id.TvIsiVisi);
        tvIsiMisi = findViewById(R.id.TvIsiMisi);
        tvIsiMitra = findViewById(R.id.TvIsiMitra);

        ivBack = findViewById(R.id.IVSettingBack);
        ivBack.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                ControllerHome();

            }
        });

        final String  URL_about =  "https://x";

        final StringRequest stringRequest = new StringRequest(Request.Method.GET, URL_about, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                try {
                    //Take json Object
                    JSONObject jsonObject = new JSONObject(response);

                    //Take Parameter success from php
                    String success = jsonObject.getString("success");

                    //get Array tempat from php
                    JSONArray jsonArray = jsonObject.getJSONArray("about");

                    //traversing through all the object
                    for (int i = 0; i < jsonArray.length(); i++) {

                        //getting product object from json array
                        JSONObject detail = jsonArray.getJSONObject(i);

                        //adding the product to HashMap
                        HashMap<String, String> map = new HashMap<>();
                        map.put("visi",  detail.getString("visi"));
                        map.put("misi",  detail.getString("misi"));
                        map.put("mitra",  detail.getString("mitra"));
                        list_data.add(0, map);
                    }

                    //Put Picture Location to Glide (function) and show it on layout item ("Imageview")
                    /*Glide.with(getApplicationContext())
                            .load(list_data.get(0).get("foto"))
                            .into(Imageview);*/

                    //Put each data in each Layout item
                    tvIsiVisi.setText(list_data.get(0).get("visi"));
                    tvIsiMisi.setText(list_data.get(0).get("misi"));
                    tvIsiMitra.setText(list_data.get(0).get("mitra"));

                    ProgressBar.setVisibility(View.GONE);

                }
                catch (JSONException e) {
                    e.printStackTrace();
                    Toast.makeText(SettingMenu.this, "Error : " +e.toString(), Toast.LENGTH_SHORT).show();
                    AboutUs();
                }
            }
        },
                //Give something in these case toast to notice if server gone nuts. (it's only basic got no more time to detailed it)
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(getApplicationContext(), "Something Wrong :/",Toast.LENGTH_LONG).show();
                    }
                });

        //adding our stringrequest to queue
        Volley.newRequestQueue(this).add(stringRequest);

    }

    private void Cancel() {

        user_username.setVisibility(View.VISIBLE);
        user_email.setVisibility(View.VISIBLE);
        user_password.setVisibility(View.VISIBLE);

        ETUname.setText("");
        ETUname.setVisibility(View.GONE);

        ETPass.setText("");
        ETPass.setVisibility(View.GONE);

        ETEmail.setText("");
        ETEmail.setVisibility(View.GONE);

        UserEditProfile.setVisibility(View.GONE);

    }
}

标签: javaandroid

解决方案


solved by using setContentView rather than setVisibility.


推荐阅读