2014-02-22 111 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