12345
12345

Reputation: 143

Hide and show layout based on conditions in Android

I am new to Android. I want to hide and show Linearlayout based on if else conditions. In my application I have taken 1 spinner. Based on selected spinner values I want my next layout hide or visible, but if it is once gone it not comes visible again.

My code is:

    public class Expense extends Activity{
    Spinner datype;

    public void onCreate(Bundle b){
    super.onCreate(b);
    setContentView(R.layout.expense);
    mainlayout=(LinearLayout)this.findViewById(R.id.layout1);
    datype=(Spinner)findViewById(R.id.da_type);
    List<String>data1=new ArrayList<String>();
    data1.add("Local");
    data1.add("Ex-Station Double Side");
    data1.add("Ex-Station Single Side");
    data1.add("Out-Station Double Side");
    data1.add("Out-Station Single Side");
    ArrayAdapter<String>adapter=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,data1);
    adapter.setDropDownViewResource(android.R.layout.simple_list_item_single_choice);
    datype.setAdapter(adapter);
    if(datype.getSelectedItem().toString().equals("Local")){

        mainlayout.setVisibility(LinearLayout.GONE);
    }
    else 
        mainlayout.setVisibility(LinearLayout.VISIBLE);


}

}

Upvotes: 6

Views: 30448

Answers (5)

Udara Abeythilake
Udara Abeythilake

Reputation: 1213

rather than hiding the layout you can hide the entire view as below

  public class Expense extends Activity implements OnItemSelectedListener {

private Spinner datype;
private LinearLayout mainlayout;

public void onCreate(Bundle b) {
    super.onCreate(b);
    setContentView(R.layout.expense);
    mainlayout=(LinearLayout)this.findViewById(R.id.layout1);
    datype=(Spinner)findViewById(R.id.da_type);
    List<String>data1=new ArrayList<String>();
    data1.add("Local");
    data1.add("Ex-Station Double Side");
    data1.add("Ex-Station Single Side");
    data1.add("Out-Station Double Side");
    data1.add("Out-Station Single Side");
    ArrayAdapter<String>adapter=new ArrayAdapter<String (this,android.R.layout.simple_spinner_item,data1);
    adapter.setDropDownViewResource(android.R.layout.simple_list_item_single_choice);
    datype.setAdapter(adapter);
    if(datype.getSelectedItem().toString().equals("Local")){
        mainlayout.setVisibility(View.GONE);
    }
    else {
        mainlayout.setVisibility(View.VISIBLE);
    } 

    // here we set the listener
    datatype.setOnItemSelectedListener(this);
}

public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
    // here we change layout visibility again
    if(datype.getSelectedItem().toString().equals("Local")){
        mainlayout.setVisibility(LinearLayout.GONE);
    }
    else {
        mainlayout.setVisibility(LinearLayout.VISIBLE);
    } 
}

public void onNothingSelected(AdapterView<?> parent) {
}
}

Upvotes: 0

sivaBE35
sivaBE35

Reputation: 1891

And also add

android:visibility="visible"

in your mainlayout xml. then use this

mainlayout.setVisibility(View.GONE);

in your code

Upvotes: 3

sergej shafarenka
sergej shafarenka

Reputation: 20416

You need to set OnItemSelectedListener and change your layout there too. Here is an example where your activity implements OnItemSelectedListener.

public class Expense extends Activity implements OnItemSelectedListener {

private Spinner datype;
private LinearLayout mainlayout;

public void onCreate(Bundle b) {
    super.onCreate(b);
    setContentView(R.layout.expense);
    mainlayout=(LinearLayout)this.findViewById(R.id.layout1);
    datype=(Spinner)findViewById(R.id.da_type);
    List<String>data1=new ArrayList<String>();
    data1.add("Local");
    data1.add("Ex-Station Double Side");
    data1.add("Ex-Station Single Side");
    data1.add("Out-Station Double Side");
    data1.add("Out-Station Single Side");
    ArrayAdapter<String>adapter=new ArrayAdapter<String (this,android.R.layout.simple_spinner_item,data1);
    adapter.setDropDownViewResource(android.R.layout.simple_list_item_single_choice);
    datype.setAdapter(adapter);
    if(datype.getSelectedItem().toString().equals("Local")){
        mainlayout.setVisibility(LinearLayout.GONE);
    }
    else {
        mainlayout.setVisibility(LinearLayout.VISIBLE);
    } 

    // here we set the listener
    datatype.setOnItemSelectedListener(this);
}

public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
    // here we change layout visibility again
    if(datype.getSelectedItem().toString().equals("Local")){
        mainlayout.setVisibility(LinearLayout.GONE);
    }
    else {
        mainlayout.setVisibility(LinearLayout.VISIBLE);
    } 
}

public void onNothingSelected(AdapterView<?> parent) {
}
}

Upvotes: 9

Piyush
Piyush

Reputation: 18933

you can use this

instead

mainlayout.setVisibility(LinearLayout.GONE);

of

mainlayout.setVisibility(View.GONE);

you have to hide and show your Code after click event of Spinner just this OnItemSelectedListener method..

Upvotes: 8

Ritaban
Ritaban

Reputation: 773

Instead of linear layout.gone try View.GONE

Upvotes: 2

Related Questions