2017-01-09 12 views
1

我试图使用意图在我的主要活动上设置一个edittext,这相当于我的第二个活动上的textview。第二项活动有一个按钮,当按下该按钮时,将启动一个从10秒开始倒计时的计时器,并且每次按下该按钮时计数一次。 10秒后,我想要取得textview的值(按下按钮的次数设置),将主活动的edittext设置为等于它,然后返回到主活动。一旦计时器用完,如何使用意图将字符串传递给主要活动?

这个想法是,您可以手动输入主要活动的计数,或使用内置计时器来帮助您计数。

我的应用程序在打开时崩溃,我尝试了多种方法来做到这一点无济于事。我认为这个问题可能源于onCreate对主要活动“寻找”意图,但它不在那里,因为它在按下第二个活动的按钮时正在运行。

主要活动

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    qtyInput = (EditText) findViewById(R.id.qtyInput); 
    valueInput = (EditText) findViewById(R.id.valueInput); 
    resultText = (TextView) findViewById(R.id.resultText); 

    Intent intent = getIntent(); 
    String clickCount = intent.getExtras().getString("clickCount"); 
    qtyInput.setText(clickCount); 

    Button calcButton = (Button) findViewById(R.id.calcButton); 
    calcButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      float qty = Float.parseFloat(qtyInput.getText().toString()); 
      float value = Float.parseFloat(valueInput.getText().toString()); 
      float total = qty * value * 60; 
      String stringTotal = String.format("%.0f", total); 
      resultText.setText(stringTotal); 
     } 
    }); 

    Button countButton = (Button) findViewById(R.id.countButton); 
    countButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      startActivity(new Intent(MainActivity.this, CountActivity.class)); 
     } 
    }); 
} 

次活动

final TextView countdownTimer = (TextView) findViewById(R.id.countdownTimer); 

    final CountDownTimer timer = new CountDownTimer(10000,1000) { 
     public void onTick(long millisUntilFinished) { 
      int seconds = (int) ((millisUntilFinished/1000)); 
      countdownTimer.setText("Time left: " + millisUntilFinished/1000); 
     } 
     public void onFinish() { 
      String clickCount = countDisplay.getText().toString(); 
      final Intent passCount = new Intent(CountActivity.this, MainActivity.class); 
      passCount.putExtra("clickCount", clickCount); 
      startActivity(passCount); 
     } 
    }; 

    final TextView countDisplay = (TextView) findViewById(R.id.countDisplay); 
     int count; 

    Button countOneButton = (Button) findViewById(R.id.countOneButton); 
    countOneButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view){ 
      if (clickcount==0) { 
       timer.start(); 
       clickcount++; 
       countDisplay.setText("Count: " + clickcount); 
      } 
      else { 
       clickcount++; 
       countDisplay.setText("Count: " + clickcount); 
      } 

     } 
    }); 

} 

回答

1

我想借此TextView中的值(由 按钮多少次按下SET键)在主要活动上设置edittext等于 它,并返回到主要活动。开始CountActivity活动后

随着当前的代码调用MainActivity.this.finish()

两种方式从CountActivity找回数据的MainActivity。在MainActivity使用startActivityForResult代替startActivity和覆盖onActivityResult

startActivity(new Intent(MainActivity.this, CountActivity.class)); 
    MainActivity.this.finish(); 

2.开始CountActivity活动获得的数据来自CountActivity回来。发送数据呼叫setResult方法完成之前CountActivity活动。

Intent passCount = new Intent(); 
passCount.putExtra("clickCount", clickCount); 
CountActivity.this.setResult(Activity.RESULT_OK,passCount); 
CountActivity.this.finish(); 
+0

好吧,这是有道理的。我研究了如何使用startActivityForResult,并且这似乎是使我为此工作的最佳方式。我一直在搞这个,我觉得我很接近,但是当计时器用完时它已经崩溃了,它应该回到主要活动。我将returnIntent的代码放入倒数计时器内的onFinish代码块中。这是正确的安置吗? – gah4716

+0

另外,你如何重写onActivityResult? – gah4716

+0

@ gah4716:是的,从'onFinish'调用setResult –

相关问题