2012-02-22 3 views
1

В main.xml Я сделал строку, содержащую TextView, EditText и кнопку «+» и «-».Измените значение EditText на кнопку OnClick?

Под этим я сделал кнопку «Добавить», которая поможет вам создать новую строку. Когда вы нажимаете кнопку «Добавить», вы получаете кнопку EditText и кнопку «Отправить» и «Отмена».

В «Отправить» он выводит значение EditText в TextView и создает ту же строку, что и первая.

Числовое значение «NewValueBox» должно +1 при нажатии кнопки «+». Но поскольку я называю это другой функцией, она не распознается функцией createNewAddButton(), в которой установлена ​​кнопка.

Итак, вкратце: «Как изменить значение NewValueBox при нажатии кнопки NewAddButton?»

Вот код:

package com.lars.MyApp; 

import com.google.ads.*; 
import com.lars.MyApp.R; 

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.LinearLayout; 
import android.widget.TableLayout; 
import android.widget.TableRow; 
import android.widget.TextView; 
import android.text.InputType; 
import android.view.View; 
import android.view.View.OnClickListener; 

public class DrinkRecOrderActivity extends Activity { 

    int currentValue1 = 0; 
    int currentValueNew = 0; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     final EditText firstValue = (EditText) findViewById(R.id.firstValue); 
     Button valuePlus = (Button) findViewById(R.id.valuePlus); 
     Button valueMinus = (Button) findViewById(R.id.valueMinus); 

     final Button addValue = (Button) findViewById(R.id.add); 

     final TableLayout tableLayout1 = (TableLayout) findViewById(R.id.tableLayout1); 
     final LinearLayout addValueRow = (LinearLayout) findViewById(R.id.addValueRow); 

     final EditText addNewValue = (EditText) findViewById(R.id.addNewValue); 
     final Button submitNewValue = (Button) findViewById(R.id.submitNewValue); 
     final Button cancelNewValue = (Button) findViewById(R.id.cancelNewValue); 

     // BEGIN ONCLICKLISTENERS 
     valuePlus.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       plusValue(); 
       firstValue.setText("" + currentValue1); 
      } 
     }); 

     valueMinus.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       minValue(); 
       firstValue.setText("" + currentValue1); 
      } 
     });  

     addValue.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       addValueRow.setVisibility(View.VISIBLE); 
       addValue.setVisibility(View.GONE); 
      } 
     }); 

     cancelNewValue.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       addValueRow.setVisibility(View.GONE); 
       addValue.setVisibility(View.VISIBLE); 
      } 
     }); 

     submitNewValue.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       tableLayout1.addView(createnewRow()); 
       addValueRow.setVisibility(View.GONE); 
       addValue.setVisibility(View.VISIBLE); 
       addNewValue.setText(""); 
      } 
     }); 

     // END ONCLICKLISTENERS 

     // Look up the AdView as a resource and load a request. 
     AdView adView = (AdView) this.findViewById(R.id.adView); 
     adView.loadAd(new AdRequest()); 
    } 

    public TableRow createNewRow() { 
     final TableRow newRow = new TableRow(this); 
     final EditText addNewValue = (EditText) findViewById(R.id.addNewValue); 
     newRow.addView(createNewTextView(addNewValue.getText().toString())); 
     newRow.addView(createNewValueBox()); 
     newRow.addView(createNewAddButton()); 
     newRow.addView(createNewMinusButton()); 
     return newRow; 
    } 

    public TextView createNewTextView(String text) { 
     final TextView textView = new TextView(this); 
     textView.setText(text); 
     return textView; 
    } 

    public EditText createNewValueBox() { 
     EditText NewValueBox = new EditText(this); 
     NewValueBox.setHint("0"); 
     NewValueBox.setInputType(InputType.TYPE_CLASS_NUMBER); 
     return NewValueBox; 
    } 

    public Button createNewAddButton() { 
     final Button NewAddButton = new Button(this); 

     NewAddButton.setText("+"); 

     NewAddButton.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       plusNew(); 

       //NewValueBox.setText("" + currentValueNew); 
      } 

     }); 

     return NewAddButton; 
    } 

    public Button createNewMinusButton() { 
     final Button NewMinusButton = new Button(this); 
     NewMinusButton.setText("-"); 
     return NewMinusButton; 
    } 

    // BEGIN PLUS AND MIN FUNCTIONS 

    public void plusNew() { 
     if (currentValueNew <= 999) { 
      currentValueNew = currentValueNew + 1; 
     } 
    } 

    public void plusValue() { 
     if (currentValue1 <= 999) { 
      currentValue1 = currentValue1 + 1; 
     } 
    } 

    public void minValue() { 
     if (currentValue1 >= 1) { 
      currentValue1 = currentValue1 - 1; 
     } 
    } 

    // END PLUS AND MIN FUNCTIONS 

} 
+0

в функции on-click-handler для вашей кнопки, вызовите setText ('chars') для конкретного объекта EditText. – hovanessyan

ответ

2

Добавить ID сек для Views, так что вы можете ссылаться на них позже. Сделайте 3 частных статических ИНТ поле в вашей деятельности (ID для NewValueBox, NewAddButton и NewMinusButton):

private static int edt = 1; 
private static int add = 1001; 
private static int minus = 2001; 

Затем в методе createNewValueBox() установить ID:

NewValueBox.setId(edt); 
edt++; 

сделать то же самое для NewAddButton и NewMinusButton:

NewAddButton.setId(add); 
add++; 

NewMinusButton.setId(minus); 
    minus++; 

Затем в слушателе для кнопки точно узнать, какая кнопку добавить было нажата и установить текст в соответствующем EditText:

NewAddButton.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       plusNew(); 
       int tmp = v.getId(); 
       EditText temp = (EditText) findViewById(1 + (tmp - 1001)); 
       temp.setText("" + currentValueNew); 
      } 

Вид хак метода.

+0

Спасибо большое! Это сработало! Единственное, что я получил сейчас ... Когда я добавляю несколько строк, и, например, я нажимаю «+» 3 раза. И затем нажмите другое значение, как только оно перейдет к 4. Так currentValueNew рассчитывает ... –

+0

@LarsVandeDonk у вас должен быть отдельный массив для хранения новых значений, потому что вы делитесь этим поле со всеми добавляемыми мной строками. – Luksprog

+0

Да, я понял, есть ли способ сделать то же самое, что и вы в v.getId(); к массиву? Итак, я подсчитываю количество массивов или что-то еще? –

Смежные вопросы