Java android应用程序变量需要是本地变量,但可以是';我不能接受它
我有一个非常奇怪的问题,我用通货膨胀来复制一个布局x倍,我设置了一个值并修改它(递增或递减)。现在一切都好了,问题是变量是全局的,当我递增或递减它时。现在他在每一次通货膨胀中都是局部的,因为我希望他在每一次通货膨胀中递减。当我试图减少或增加它时,会出现奇怪的错误 代码如下:Java android应用程序变量需要是本地变量,但可以是';我不能接受它,java,android,variables,global-variables,Java,Android,Variables,Global Variables,我有一个非常奇怪的问题,我用通货膨胀来复制一个布局x倍,我设置了一个值并修改它(递增或递减)。现在一切都好了,问题是变量是全局的,当我递增或递减它时。现在他在每一次通货膨胀中都是局部的,因为我希望他在每一次通货膨胀中递减。当我试图减少或增加它时,会出现奇怪的错误 代码如下: package com.example.instances_temperature; import com.example.instances_temperature.R; //import com.example
package com.example.instances_temperature;
import com.example.instances_temperature.R;
//import com.example.instances_temperature.Tabel.RptUpdater;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import android.os.Build;
public class Tabel extends ActionBarActivity {
int i;
int value; // Ignore this, this is the number that is taked from mainactivity for Inflation
//int counter=20; // counter default value for start = 20
static int REP_DELAY = 50; // Constant value for long click update
private Handler repeatUpdateHandler = new Handler();
private boolean mAutoIncrement = false;
private boolean mAutoDecrement = false;
public class yourActivity{
int counter = 20;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tabel);
Intent intentObject = getIntent();
value = intentObject.getIntExtra("max", 0);
LinearLayout layout = (LinearLayout)findViewById(R.id.container2);
for(i=1;i<=value;i++)
{
LayoutInflater layoutinflate = null;
layoutinflate = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View rowview = layoutinflate.inflate( R.layout.inflation_layout, null);
Button add,sub;
final TextView display;
final TextView showup;
add = (Button) rowview.findViewById(R.id.plus);
sub = (Button) rowview.findViewById(R.id.minus);
display = (TextView) rowview.findViewById(R.id.showtemp);
showup = (TextView) rowview.findViewById(R.id.showvalue);
showup.setText(" "+counter+"°C ");
display.setText(""+counter+"°C");
add.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if(counter<35){
counter++;
display.setText( "" + counter+"°C ");
showup.setText(" "+counter+"°C ");
}
else{
Context context = getApplicationContext();
CharSequence text = "Maximum value is 35°C!";
int duration = Toast.LENGTH_SHORT;
final Toast toast = Toast.makeText(context, text, duration);
toast.show();
toast.setGravity(Gravity.TOP, 0, 100);
}
}
});
sub.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if(counter>10){
counter--;
display.setText( "" + counter+"°C");
showup.setText(" "+counter+"°C ");
}
else{
Context context = getApplicationContext();
CharSequence text = "Minimum value is 10°C!";
int duration = Toast.LENGTH_SHORT;
final Toast toast = Toast.makeText(context, text, duration);
toast.show();
toast.setGravity(Gravity.BOTTOM, 0, 50);
}
}
});
add.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
mAutoIncrement = true;
repeatUpdateHandler.post(new RptUpdater() );
return false;
}
});
add.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
if( (event.getAction()==MotionEvent.ACTION_UP || event.getAction()==MotionEvent.ACTION_CANCEL) && mAutoIncrement )
mAutoIncrement = false;
return false;
}
});
sub.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
mAutoDecrement = true;
repeatUpdateHandler.post(new RptUpdater() );
return false;
}
});
sub.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
if( (event.getAction()==MotionEvent.ACTION_UP || event.getAction()==MotionEvent.ACTION_CANCEL) && mAutoDecrement )
mAutoDecrement = false;
return false;
}
});
layout.addView(rowview);
}
//showvalue.setText(String.valueOf(getIntent().getExtras().getInt("max")));
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.tabel, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
/**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment extends Fragment {
public PlaceholderFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_tabel,
container, false);
return rootView;
}
}
/*protected void onSaveInstanceState(Bundle savedInstance) {
super.onSaveInstanceState(savedInstance);
savedInstance.putInt("myCounter",counter);
}*/
class RptUpdater implements Runnable {
public void run() {
if( mAutoIncrement && counter < 35){
//increment();
if(counter<35)
{
counter++;
display.setText( "" + counter+"°C");
showup.setText(" "+counter+"°C ");
}
else
{
Context context = getApplicationContext();
CharSequence text = "Maximum value is 35°C!";
int duration = Toast.LENGTH_SHORT;
final Toast toast = Toast.makeText(context, text, duration);
toast.show();
toast.setGravity(Gravity.TOP, 0, 100);
}
repeatUpdateHandler.postDelayed( new RptUpdater(), REP_DELAY );
}
else
if( mAutoDecrement && counter > 10){
// decrement();
if(counter>10)
{
counter--;
display.setText( "" + counter+"°C");
showup.setText(" "+counter+"°C ");
repeatUpdateHandler.postDelayed( new RptUpdater(), REP_DELAY );
}
else
{
Context context = getApplicationContext();
CharSequence text = "Minimum value is 10°C!";
int duration = Toast.LENGTH_SHORT;
final Toast toast = Toast.makeText(context, text, duration);
toast.show();
toast.setGravity(Gravity.BOTTOM, 0, 50);
}
}
}
}
}
}
我还有3个递减或递增,这只是一个例子,如果我解决了这个问题,我也可以解决另一个问题。如果需要所有的代码,我会发布它。我认为这不是关于研究,我尝试了一些解决方案,但没有改进,是关于程序的逻辑
谢谢你抽出时间
final int counter = 20;
从内部类你们可以访问外部类的变量。所以你们可以使用计数器。但因为你们已经声明了它是最终的,你们不能改变/增加它
public class yourActivity{
int counter = 20;
protected void onCreate(Bundle savedInstanceState){
//your Logic
}
class RptUpdater implements Runnable{
//counter logic
}
}
从内部类你们可以访问外部类的变量。所以你们可以使用计数器。但因为你们已经声明了它是最终的,你们不能改变/增加它
public class yourActivity{
int counter = 20;
protected void onCreate(Bundle savedInstanceState){
//your Logic
}
class RptUpdater implements Runnable{
//counter logic
}
}
从内部类你们可以访问外部类的变量。所以你们可以使用计数器。但因为你们已经声明了它是最终的,你们不能改变/增加它
public class yourActivity{
int counter = 20;
protected void onCreate(Bundle savedInstanceState){
//your Logic
}
class RptUpdater implements Runnable{
//counter logic
}
}
从内部类你们可以访问外部类的变量。所以你们可以使用计数器。但因为你们已经声明了它是最终的,你们不能改变/增加它
public class yourActivity{
int counter = 20;
protected void onCreate(Bundle savedInstanceState){
//your Logic
}
class RptUpdater implements Runnable{
//counter logic
}
}
而不是
final int counter = 20;
使用
就这样。声明为final
的变量以后不能修改。这是一个常数
将封闭类型作为原因的错误消息具有误导性。而不是
final int counter = 20;
使用
就这样。声明为final
的变量以后不能修改。这是一个常数
将封闭类型作为原因的错误消息具有误导性。而不是
final int counter = 20;
使用
就这样。声明为final
的变量以后不能修改。这是一个常数
将封闭类型作为原因的错误消息具有误导性。而不是
final int counter = 20;
使用
就这样。声明为final
的变量以后不能修改。这是一个常数
将封闭类型作为原因的错误消息具有误导性。这就是java中存在关键字final的原因。变量是最终变量,即其值不能更改。如果必须更改该值,请不要将变量标记为final 或 使用final关键字声明变量意味着无法更改其值。最后一个变量类似于常量 尝试以下代码:-
int counter = 20;// initialize counter value globally
protected void onCreate(Bundle savedInstanceState) {
class RptUpdater implements Runnable {
public void run() {
if( mAutoIncrement && counter < 35){
//increment();
if(counter<35)
{
counter++;
display.setText( "" + counter+"°C");
showup.setText(" "+counter+"°C ");
}
int计数器=20;//全局初始化计数器值
创建时受保护的void(Bundle savedInstanceState){
类更新程序实现Runnable{
公开募捐{
如果(最大增量和计数器<35){
//增量();
if(counter这就是java中存在关键字final的原因。变量为final,即其值不能更改。如果必须更改值,请不要将变量标记为final
或
使用final关键字声明变量意味着其值不能更改。final变量类似于常量
尝试以下代码:-
int counter = 20;// initialize counter value globally
protected void onCreate(Bundle savedInstanceState) {
class RptUpdater implements Runnable {
public void run() {
if( mAutoIncrement && counter < 35){
//increment();
if(counter<35)
{
counter++;
display.setText( "" + counter+"°C");
showup.setText(" "+counter+"°C ");
}
int counter=20;//全局初始化计数器值
创建时受保护的void(Bundle savedInstanceState){
类更新程序实现Runnable{
公开募捐{
如果(最大增量和计数器<35){
//增量();
if(counter这就是java中存在关键字final的原因。变量为final,即其值不能更改。如果必须更改值,请不要将变量标记为final
或
使用final关键字声明变量意味着其值不能更改。final变量类似于常量
尝试以下代码:-
int counter = 20;// initialize counter value globally
protected void onCreate(Bundle savedInstanceState) {
class RptUpdater implements Runnable {
public void run() {
if( mAutoIncrement && counter < 35){
//increment();
if(counter<35)
{
counter++;
display.setText( "" + counter+"°C");
showup.setText(" "+counter+"°C ");
}
int counter=20;//全局初始化计数器值
创建时受保护的void(Bundle savedInstanceState){
类更新程序实现Runnable{
公开募捐{
如果(最大增量和计数器<35){
//增量();
if(counter这就是java中存在关键字final的原因。变量为final,即其值不能更改。如果必须更改值,请不要将变量标记为final
或
使用final关键字声明变量意味着其值不能更改。final变量类似于常量
尝试以下代码:-
int counter = 20;// initialize counter value globally
protected void onCreate(Bundle savedInstanceState) {
class RptUpdater implements Runnable {
public void run() {
if( mAutoIncrement && counter < 35){
//increment();
if(counter<35)
{
counter++;
display.setText( "" + counter+"°C");
showup.setText(" "+counter+"°C ");
}
int counter=20;//全局初始化计数器值
创建时受保护的void(Bundle savedInstanceState){
类更新程序实现Runnable{
公开募捐{
如果(最大增量和计数器<35){
//增量();
if(counter是的,但是如果我去掉final,我会在每一行上得到一个错误,说它必须是final?相信什么?把它作为一个实例变量而不是局部变量。Alo从for循环中删除类RptUpdater。只需将它作为内部类保留。你的意思是删除类RptUpdater并让函数public void运行()?请一步一步地解释noobs应该是什么样子。谢谢你的工作,但我需要使用show和display(这些是文本视图来显示应用程序中的值)我将更新所有代码以查看。是的,但是如果我去掉final,我会在每一行上得到错误,说它必须是final?相信什么?将其作为实例变量而不是局部变量。Alo从for循环中删除类RptUpdater。只需将其作为内部类保留。您的意思是删除类RptUpdater并让函数public void运行()请一步一步地解释noobs应该是什么样子。谢谢你的工作,但我需要使用show和display(它们是