마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

동적버튼의 값 따로 받는법

0 추천

push할때마다 음식의 이름과 음식의 가격을 editText를 이용해서 버튼에 추가하게 됩니다. 그런데 버튼을 누를때마다 가격 즉 prc 값을  위에다 추가 해주고 싶은데 prc 값이 다른 버튼을 추가해줄때마다 변경되어서 계속 똑같은 값이 나옵니다(str=돼지고기 prc=18000 을추가해주면  음식:돼지고기 가격:18000버튼이 생성 됩니다. 그리고 버튼을 누르면 음식 가격 : 18000이라고 뜸니다. 그리고 str=닭고기 prc=9000 원을 push 버튼을 눌러서 또 추가해준후 첫번째 버튼을 누르면 위쪽에 가격이 18000이라고 뜨지않고 9000원이라고 뜹니다 어떡해 해야할까요?

public class food2main extends Activity implements OnClickListener {

    private final int DYNAMIC_VIEW_ID  = 0x8000;
    private final int MAX_DYNAMIC_VIEW = 8;
    private Button       pushButton;
    private Button       popButton;
    private TextView     statusText;
    private TextView     infoText;
    private GridLayout dynamicLayout;
    private int          numButton = 0;

    LayoutInflater inflater;

    final static int DIALOG_1 = 0;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.food2main);
//버튼에디ㅡㅌ

        inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);

        //버튼추가
        pushButton = (Button)findViewById(R.id.pushButton);
        popButton  = (Button)findViewById(R.id.popButton);
        statusText = (TextView)findViewById(R.id.statusText);
        infoText   = (TextView)findViewById(R.id.infoText);

        pushButton.setOnClickListener(this);
        popButton.setOnClickListener(this);

        setStatusText(0);
        setInfoText(DYNAMIC_VIEW_ID);

        dynamicLayout = (GridLayout) findViewById(R.id.dynamicArea);
    }

    @Override
    //버튼선언
    public void onClick(View v) {
        int id = v.getId();

        if ( id == R.id.pushButton ) {
            pushButton();
            showDialog(DIALOG_1);
        }
        else if ( id == R.id.popButton ) {
            popButton();
        }
        else if ( ( id > DYNAMIC_VIEW_ID ) && ( id <= DYNAMIC_VIEW_ID + MAX_DYNAMIC_VIEW ) ) {
            setInfoText(prc);
        }
    }

//버튼 개수
    private void setStatusText(int num) {
        statusText.setText(getString(R.string.status_msg) + " " + num);
    }

    private void setInfoText(int id) {
        if ( id == DYNAMIC_VIEW_ID ) {
            infoText.setText(getString(R.string.info_msg) + " " + getString(R.string.null_msg));
        }
        else
        {
            infoText.setText(getString(R.string.info_msg) + " " + prc);
        }
    }
    //버튼 메뉴추가
    String str;
    int prc;
    public Dialog onCreateDialog(int id) {
        switch (id) {
            case DIALOG_1:
                final LinearLayout linear = (LinearLayout)inflater.inflate(R.layout.foodmenue, null);
                return new AlertDialog.Builder(food2main.this)
                        .setTitle("메뉴추가")
                        .setView(linear)
                        .setPositiveButton("확인", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                EditText editname = (EditText)linear.findViewById(R.id.editname);
                                EditText price = (EditText)linear.findViewById(R.id.price);
                                str = editname.getText().toString();
                                prc = Integer.parseInt(price.getText().toString());
                            }


                        })
                        .setNegativeButton("취소", null)
                        .create();
        }
        return null;
    }
//부튼 추가
    public void pushButton() {
        if ( numButton >= MAX_DYNAMIC_VIEW ) {
            return;
        }
        setStatusText(++numButton);
        Button dynamicButton = new Button(this);
        dynamicButton.setId(DYNAMIC_VIEW_ID + numButton);
        dynamicButton.setText("음식:"+str+"\n"+"가격:" + prc);
        dynamicButton.setOnClickListener(this);
        dynamicLayout.addView(dynamicButton, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    }
//버튼 삭제
    private void popButton() {
        if ( numButton <= 0 ) {
            return;
        }

        Button dynamicButton = (Button)findViewById(DYNAMIC_VIEW_ID + numButton);
        dynamicLayout.removeView(dynamicButton);
        setStatusText(--numButton);
    }
}

 

익명사용자 님이 2017년 8월 23일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...