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

버튼의 버튼값을 따로 받고 싶은데 어떻게 해야할까요?

0 추천

페이지의 소스입니다.

버튼을 누를때마다 가격이라는 택스트에 ID값이 아닌 버튼의 가격을 따로 받고 싶습니다.

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 Button       girlButton;
    private Button       manButton;
    private TextView     statusText;
    private TextView     infoText;
    private GridLayout dynamicLayout;
    private int          numButton = 0;
    private  int g=0;
    private  int m=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);
        girlButton= (Button)findViewById(R.id.girlButton);
        manButton=(Button)findViewById(R.id.manButton);


        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(id);

        }
        else if(id==R.id.girlButton)
        {
            g++;
        }
        else if(id==R.id.manButton)
        {
            m++;
        }
    }

//버튼 개수
    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) + " " + id + 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년 9월 14일 질문
xml 입니다.
<?xml version="1.0" encoding="utf-8"?>
    <LinearLayout android:layout_height="fill_parent"
    android:layout_width="fill_parent"
    android:orientation="vertical"
    xmlns:android="http://schemas.android.com/apk/res/android"
        android:weightSum="1">

    <TextView android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        android:text="@string/status_msg"
        android:textSize="20sp"
        android:id="@+id/statusText"/>
    <LinearLayout
        android:layout_height="51dp"
        android:layout_width="fill_parent"
        android:orientation="horizontal"
        android:background="@drawable/salback">

    <Button
        android:layout_height="wrap_content"
        android:layout_width="0dip"
        android:text="@string/push_msg"
        android:id="@+id/pushButton"
        android:layout_weight="50"/>
    <Button
        android:layout_height="wrap_content"
        android:layout_width="0dip"
        android:text="@string/pop_msg"
        android:id="@+id/popButton"
        android:layout_weight="50"/>
</LinearLayout>

    <TextView
        android:id="@+id/infoText"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="#FFFF00"
        android:text="@string/info_msg"
        android:textColor="#000000"
        android:textSize="20sp" />


    <GridLayout
        android:id="@+id/dynamicArea"
        android:layout_width="match_parent"
        android:layout_height="91dp"
        android:columnCount="4"
        android:orientation="horizontal"
        android:rowCount="4" />

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        >

        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/bar"
            android:text="가격:"
            android:textSize="50sp"
            android:layout_alignParentBottom="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true" />

        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="58dp"
            android:background="@drawable/salback"
            android:layout_alignParentTop="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_marginTop="14dp">

            <LinearLayout
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal">

                    <Button
                        android:id="@+id/girlButton"
                        android:layout_width="0dip"
                        android:layout_height="wrap_content"
                        android:layout_weight="50"
                        android:text="@string/push_girl" />

                <Button
                    android:id="@+id/manButton"
                    android:layout_width="0dip"
                    android:layout_height="wrap_content"
                    android:layout_weight="50"
                    android:text="@string/push_man" />
            </LinearLayout>
        </FrameLayout>
    </RelativeLayout>
</LinearLayout>

1개의 답변

0 추천

질문의 요지는 버튼에 음식 : xxx  가격 : xxx

적혀있는 버튼에서 가격의 숫자만 추출하고 싶으신것 같은데

int poisition = str.indexOf(":");

마지막 콜론의 위치를 알아내고 subString 함수를 이용해 가격을 추출하는 방법도 있겠지만

아래 처럼 VIew 관련 객체에 setTag를 이용해 가격을 넣어주고 getTag함수를 이용해 뷰에 저장된 값을 불러올수 있습니당

 

Button button = new Button(this);
button.setTag(1000);
Log.e("price :",button.getTag()+"");

 

 

 

 

Printf (1,380 포인트) 님이 2017년 9월 14일 답변
...