2014-02-22 110 views
-3

在這個程序中,我有一個TextView它說:「輸入LineData的數量:」。 在這個下面我有一個EditText它允許單獨的數字。 下面我有一個Button其功能是顯示EditText的值。 要從EditText獲得整數值,我使用了Try/Catch塊內的變量「i」。 我知道這個變量「i」在該塊之外被銷燬。 但我想用這個變量在TableLayout中創建TableRow。 我試圖在Try塊內做到這一點,但我得到了錯誤。 我該如何解決這個問題?如何訪問塊外的變量?

public class Ybus_Activity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_ybus); 
     final LayoutParams params = new LayoutParams(LayoutParams.FILL_PARENT, 
       LayoutParams.WRAP_CONTENT); 
     final LinearLayout main = (LinearLayout) findViewById(R.id.android_main_layout); 
     TextView getData = new TextView(this); 
     getData.setText("Enter the number of LineData : "); 
     getData.setId(5); 
     getData.setLayoutParams(params); 
     main.addView(getData); 
     final EditText edText = new EditText(this); 
     edText.setId(3); 
     edText.setLayoutParams(params); 
     edText.setWidth(100); 
     edText.setImeOptions(EditorInfo.IME_ACTION_NEXT); 
     edText.setInputType(InputType.TYPE_CLASS_NUMBER); 
     edText.setKeyListener(DigitsKeyListener.getInstance()); 
     edText.setMaxLines(1); 
     main.addView(edText); 
     Button bt = new Button(this); 
     bt.setText("Click to enter Linedata"); 
     bt.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 
     main.addView(bt); 
     final TextView text = new TextView(this); 
     bt.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       String ed = edText.getText().toString(); 
       int i = 0; 
       try { 
        i = Integer.parseInt(ed); 
        text.setText(i + ""); 
       } catch (NumberFormatException ex) { 
        text.setText("Value at TextView is not a valid integer"); 
       } 
      } 
     }); 
     main.addView(text); 
    } 
} 
+0

聲明'INT I;''之前onCreate'。 – Raghunandan

+0

@Raghunandan:它不工作...我需要更新的值...但我沒有收到它 – gkn06

+0

它會。它會在點擊按鈕時初始化。發佈更新的代碼 – Raghunandan

回答

4

你可以聲明變量i可變

int i; 
@Override 
public void onCreate(Bundle savedInstanceState) 

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/variables.html

一個實例

你按一下按鈕裏面的代碼是EXE每次點擊按鈕時都會關閉。但是,按鈕點擊外的代碼只執行一次。

因此,你沒有看到更新後的值

編輯:

try { 
       i = Integer.parseInt(ed); 
       // setting value here 
       text.setText(String.valueOf(i)); 
       // or you can do like this 
       // text.setText(String.valueOf(i)); 
       updatedvalueOfi(i); 
      } catch (NumberFormatException ex) { 
       text.setText("Value at TextView is not a valid integer"); 
      } 

然後

public void updatedvalueOfi(int value) 
{ 
    Log.i("..........",""+i); 
} 

編輯:

public class MainActivity extends Activity { 
    int i; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     final LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, 
       LayoutParams.WRAP_CONTENT); 
     final LinearLayout main = (LinearLayout) findViewById(R.id.ll); 
     TextView getData = new TextView(this); 
     getData.setText("Enter the number of LineData : "); 
     getData.setId(5); 
     getData.setLayoutParams(params); 
     main.addView(getData); 
     final EditText edText = new EditText(this); 
     edText.setId(3); 
     edText.setLayoutParams(params); 
     edText.setWidth(100); 
     edText.setImeOptions(EditorInfo.IME_ACTION_NEXT); 
     edText.setInputType(InputType.TYPE_CLASS_NUMBER); 
     edText.setKeyListener(DigitsKeyListener.getInstance()); 
     edText.setMaxLines(1); 
     main.addView(edText); 
     Button bt = new Button(this); 
     bt.setText("Click to enter Linedata"); 
     bt.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, 
       LayoutParams.WRAP_CONTENT)); 
     main.addView(bt); 
     final TextView text = new TextView(this); 
     bt.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       String ed = edText.getText().toString(); 

       try { 
        i = Integer.parseInt(ed); 
        // setting value here 
        text.setText(String.valueOf(i)); 
        // or you can do like this 
        // text.setText(String.valueOf(i)); 

       } catch (NumberFormatException ex) { 
        text.setText("Value at TextView is not a valid integer"); 
       } 
      } 
     }); 
     main.addView(text); 
     final TextView text2 = new TextView(this); 
     Button two = new Button(this); 
     two.setText("Second"); 
     main.addView(two); 
     main.addView(text2); 
     two.setOnClickListener(new OnClickListener() 
     { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       text2.setText(String.valueOf(i)); 

      } 

     }); 

    } 

} 

捕捉

enter image description here

+0

不工作.... – gkn06

+0

@ gkn06檢查編輯它將工作。它將工作,即使與另一個按鈕 – Raghunandan

+0

兄弟它工作... – gkn06

0

你的追求答案。就是這麼容易...... 只是試圖把thie參數i以外的按鈕onclicke的... 像:

public class Ybus_Activity extends Activity { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_ybus); 
.... 
.... 
... 
.... 
int i = 0;  
bt.setOnClickListener(new View.OnClickListener() 
{ 
    public void onClick(View v) 
    { 
     String ed=edText.getText().toString(); 

     try{ 
      i =Integer.parseInt(ed); 
      text.setText(i+""); 
     }catch(NumberFormatException ex){ 
      text.setText("Value at TextView is not a valid integer"); 
     } 
    } 
}); 
... 
... 
... 
} 

我希望它幫你:)

+0

它不工作...錯誤 – gkn06

+0

請告訴我們錯誤...也許你有anotohr錯誤... – BinaryMan

+0

嘗試複製+過去錯誤,你已經獲得 – BinaryMan

2

聲明變量i設定爲靜態

public class Ybus_Activity extends Activity { 
//Here Declare the vaiable 
static int i=0; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
} 
} 
+0

應用程序不幸停止 – gkn06

+0

停止不幸,可能有錯誤分配您的id.I希望靜態詮釋我會工作 – user3251646

+0

好吧,你喜歡這樣det你的editText作爲文本,而不是隻有數字。我試過這一個它的作品。去你的圖形佈局右擊EDITTEXT和變化是輸入型的默認 和刪除此行或使其作爲註釋行 edText .setInputType(InputType.TYPE_CLASS_NUMBER) – user3251646