2013-12-19 45 views
-1

我想要一個微調控制器對象,只要用戶選擇不同的選項,就可以將它下面的文本更改爲不同的內容。 我曾嘗試實施這樣的:如何使用微調對象動態更改文本視圖?

public void onItemSelected(AdapterView<?> parent, View view, 
     int pos, long id) { 
    TextView tv1 = new TextView(this); 
    LinearLayout lay = (LinearLayout)findViewById(R.id.infoLayout); 

    switch((int)id){ 

     case 0: 
      String hours = "Office Hours:\n\tSummer: 9:00am - 10:00pm\n\tFall: 10:00am - 7:00pm"; 
      tv1.setText(hours); 
      tv1.setPadding(0, 40, 0, 0); 
      tv1.setTextColor(Color.BLACK); 
      tv1.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 35); 
      tv1.setGravity(Gravity.CENTER); 
      lay.addView(tv1); 

      break; 
     case 1: 
      String products = "Wood - $8/bag (kindling and fuel wood available)\n" + 
        "Ice - $2.75/bag (crushed and on occasion blocks)"; 
      tv1.setText(products); 
      tv1.setPadding(0, 40, 0, 0); 
      tv1.setTextColor(Color.BLACK); 
      tv1.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 25); 
      tv1.setGravity(Gravity.CENTER); 
      lay.addView(tv1); 

      break; 
     } 

但我的代碼只會增加新的文本底部。我知道這是因爲沒有執行刪除方法,這是因爲我沒有嘗試過任何工作,我認爲這會比每次崩潰都希望獲得多種意見的代碼更好。

回答

0

在佈局xml文件中,設置一個id爲TextView。然後將其設爲實例變量並更改其文本,而不是每次創建一個新文本。

public class MyActivity extends Activity { 
    TextView textView; 

    protected void onCreate(Bundle savedInstanceState) { 
     setContentView(R.layout.myLayout); 
     textView = (TextView)findViewById(R.id.myTextView); 
    } 

    public void onItemSelected(AdapterView<?> parent, View view, 
     int pos, long id) { 

     switch(pos){ 
      case 0: 
      String hours = "Office Hours:\n\tSummer: 9:00am - 10:00pm\n\tFall: 10:00am - 7:00pm"; 
      textView.setText(hours); 
      textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 35); 

      break; 
      case 1: 
      String products = "Wood - $8/bag (kindling and fuel wood available)\n" + 
        "Ice - $2.75/bag (crushed and on occasion blocks)"; 
      textView.setText(products); 
      textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 25); 

      break; 
     } 
} 
+0

非常感謝! – user3053529

0

您選擇一個項目每當你創建一個新的TextView並將其添加到的LinearLayout

TextView tv1 = new TextView(this); 

聲明tv1爲實例變量和onCreate初始化。

與LinearLayout相同。無需每次選擇項目時都初始化它。還要將textview添加到Linearlayout一次,而不是每次都這樣做。僅更改文字。

另外更改爲switch(pos)代替switch(id)

例:

public class MainActivity extends Activity implements OnItemSelectedListener{ 

    Spinner spinner; 
    String[] array; 
    TextView tv1; 
    LinearLayout ll; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     array = getResources().getStringArray(R.array.country_arrays); 
     spinner = (Spinner) findViewById(R.id.spinner1); 
     tv1= new TextView(this); 
     tv1.setText("Nothing selected"); 
     ll = (LinearLayout) findViewById(R.id.ll); 
     ll.addView(tv1); 
     ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, 
       android.R.layout.simple_spinner_item, array); 
      dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
      spinner.setAdapter(dataAdapter); 
      spinner.setOnItemSelectedListener(this); 
    } 
    @Override 
    public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, 
      long arg3) { 
     // TODO Auto-generated method stub 
      switch(arg2){ 

      case 0: 
       String hours = "Office Hours:\n\tSummer: 9:00am - 10:00pm\n\tFall: 10:00am - 7:00pm"; 
       tv1.setText(hours); 
       tv1.setPadding(0, 40, 0, 0); 
       tv1.setTextColor(Color.GREEN); 
       tv1.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 35); 
       tv1.setGravity(Gravity.CENTER); 


       break; 
      case 1: 
       String products = "Wood - $8/bag (kindling and fuel wood available)\n" + 
         "Ice - $2.75/bag (crushed and on occasion blocks)"; 
       tv1.setText(products); 
       tv1.setPadding(0, 40, 0, 0); 
       tv1.setTextColor(Color.GREEN); 
       tv1.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 25); 
       tv1.setGravity(Gravity.CENTER); 

       break; 
      default : tv1.setText("Defalut"); 
      } 
    } 
    @Override 
    public void onNothingSelected(AdapterView<?> arg0) { 
     // TODO Auto-generated method stub 

    } 
    } 
+0

謝謝您的輸入!這兩個答案都非常有幫助! – user3053529

+0

@ user3053529很樂意幫忙。但你想創建textview programmaticaly並將其添加到linearlayout是不是? – Raghunandan

+0

這是我的初衷,但最終選定的答案比我預想的更有效地執行它,這就是爲什麼我將「一般」這個問題留給推廣一系列可能的答案的原因。 – user3053529