2015-01-31 3 views
0

Android에서 프로그래밍하고 있습니다. 나는 레이아웃을 사용하지 않고 런타임에 버튼을 동적으로 생성합니다. 이제 동적으로 생성 된 버튼에서 액션을 호출해야합니다. 그게 가능하니?버튼을 동적으로 생성하고 거기에서 동작을 호출합니다.

동적으로 버튼을 만드는 데 다음 코드를 사용했습니다.

Button btnNew = new Button(this); 
 
String text = etName.getText().toString(); 
 
btnNew.setText(text); 
 
llMain.addView(btnNew, lParams);

는 지금은/모든 도움이 btnNew

가 감사합니다 사용하여 트리거 뭔가를 호출해야합니다. 감사합니다. .

답변

0

당신은

btnNew.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       // TODO Auto-generated method stub 

      } 
     }); 
+0

제가 동일한 코드를 사용하여 런타임에 여러 개의 버튼을 만드는거야 경우? – Lijin

+0

동적으로 버튼을 ID로 설정 – Ramesh

+0

@Ramesh - 맞습니다! –

0

Button btnNew = new Button(this); 
btnNew.setId(111); 
btnNew.setOnClickListener(this); 

Button btn2 = new Button(this); 
btn2.setId(222); 
btn2.setOnClickListener(this); 

you can implement onclick listener in your activity 

onclcik에서 당신이 좋아하는 ID를 확인하실 수 있습니다 뷰 아래 코드로 시도 설정 청취자에 의해 특정 버튼에 여러 이벤트를 수행 할 수 아래

@Override 
    public void onClick(View v) { 
     switch (v.getId()) { 
     case 111: 
      //do some thing here 
      break; 
     case 222: 
      //do some thing here 
      break; 
} 
}; 
+0

@ Ramesh- 감사합니다. 그러나 이것은 내가 만든 단일 버튼의 경우입니다. 다른 버튼을 만들면 id도 '111'로 설정되고 이전 버튼으로 참조됩니다. 그러면 어떻게 두 번째 버튼을 참조 할 수 있습니까? – Lijin

+0

다른 버튼에 다른 ID를 부여 할 수 있습니다. – Ramesh

+0

확인. 런타임시 어떻게 할 수 있습니까? 도와주세요. – Lijin

0

"OnClickListener"버튼을 사용하여 여러 작업을 수행 할 수 있습니다.

btnNew.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 

      //action here .. which you want to perform 
     } 
    }); 
+0

예이 방법을 알고 있습니다. 하지만 동일한 코드 행을 사용하여 런타임에 생성 된 5 개의 다른 버튼에 리스너를 할당해야합니다. – Lijin

+0

@Lijin ..이 5 개의 버튼은 어디에 있습니까? –

+0

이 버튼을 만들기 위해 버튼을 설정했습니다. 즉, 런타임시 버튼을 생성하는 create라는 버튼. 그래서, create 버튼을 누를 때마다 버튼이 화면에 동적으로 생성됩니다. 나의 의도는 생성 된 버튼으로 다른 작업을 수행 할 수 있도록 각 버튼의 id를 설정하는 것입니다. 설정 한 버튼 ID는 나중에 스위치 내부에서 필요한 작업을 수행하는 데 사용할 수 있습니다. – Lijin

0

당신은 아래의 코드를 사용할 수 있습니다 :

Button dynamicBtn = new Button(this); // or new Button(getActivity()); 
dynamicBtn.setTag(100); 
dynamicBtn.setOnClickListener(this); 

// Override below in fragment or activity that implements 
// 'View.OnClickListener' 

@Override 
public void onClick(View v) { 
     switch ((Integer)v.getTag()) { 
     case 100: 
      //do something 
      break; 
     default: 
      break; 
} 
}; 
+0

setTag()는 setId()와 비슷합니까? – Lijin

+0

setTag()는 다르지만 동일하게 사용할 수 있으며 setId()에 필요한 resourceId를 중심으로 사용됩니다. setTag를 사용하면 모든 객체도 전달할 수 있으므로 더 편리합니다. –

+0

예. 그게 편리 하네. 그러나'setTag() '안에 전달 된 값은 상수 인'100'입니다. 따라서이 값은 런타임에 생성 된 모든 버튼에 대해 동일합니다. 버튼을 개별적으로 참조하고 액션을 설정할 수있는 방법은 무엇입니까? – Lijin

0
Button dynamicButton = new Button(this); 
dynamicButton.setTag(new ButtonTag(100, new ButtonTag.Callback() { 
    @Override 
    public void run() { 
     // run anything here 
    } 
})); 

@Override 
public void onClick(View view) { 
    ButtonTag tag = (ButtonTag)view.getTag(); 
    tag.execute(); 

    // simpler ((ButtonTag)view.getTag()).execute(); 
} 

// don't think you need id anymore 
public static class ButtonTag{ 

    private Callback callback; 
    private int id; 

    public ButtonTag(int id, Callback callback){ 
     this.callback = callback; 
     this.id = id; 
    } 

    public void execute(){ 
     callback.run(); 
    } 

    public interface Callback{ 
     public void run(); 
    } 
} 
관련 문제