2012-06-10 4 views
0

내가 여기있는 것은 사용자 정의보기이며 일부 위젯이 함께 표시되도록하고 싶습니다.사용자 정의보기 버튼

<com.zone.manager.Tab3 
    android:id="@+id/tab3_display" 
    android:layout_width="fill_parent" 
    android:layout_height="620dp" > 

<Button 
    android:id="@+id/addZone" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Add Zone" /> 

</com.zone.manager.Tab3> 

는 지금은

addZone = (Button) findViewById(R.id.addZone); 


    addZone.setOnClickListener(this); 

내가 설정 ... 그래서 이런 짓을 내가보기 클래스에서 함께 물건을 할 수 있도록 OnClickListener를 위해 그 버튼 세트를 갖고 싶어 그

을에 내가 뷰 그룹을 확장 할 때
public class Tab3 extends ViewGroup implements OnTouchListener, OnClickListener 
    Public Tab3(Context context, AttributeSet attrs) 
    { 
    super (context, attrs); 
    // here 
    } 

은 날이

@Override 
    protected void onLayout(boolean changed, int l, int t, int r, int b) 
    { 
     // TODO Auto-generated method stub 

    } 
을 구현했다

이 작품을 만들기 위해 내가 여기에 넣어야 할 것이 있습니까?

그러나 내가 앱을 실행하려고하면, // addZone.setOnClickListener(this); 밖으로 앱이 정상적으로 실행되면 나에게 도움이됩니까?

당신의 XML로
 th.setup(); 
     TabSpec specs = th.newTabSpec("tag0"); 
     specs.setContent(R.id.connecttionTab); 
     specs.setIndicator("Connection Tab"); 
     th.addTab(specs); 
     specs = th.newTabSpec("tag1"); 
     specs.setContent(R.id.tab1); 
     specs.setIndicator("Zone Manager"); 
     th.addTab(specs); 
     specs = th.newTabSpec("tag2"); 
     specs.setContent(R.id.tab2); 
     specs.setIndicator("",res.getDrawable(R.drawable.ic_tab_vaccontrol)); 
     th.addTab(specs); 
     //this is the tab that has all this vvv 
     specs = th.newTabSpec("tag3"); 
     specs.setContent(R.id.tab3); 
     specs.setIndicator("Graphical Layout"); 
     th.addTab(specs); 
+0

ViewGroup으로 변경했을 때 Button이 Tab3 요소 안에 중첩 된 하위 요소가되도록 XML도 변경 했습니까? 게시 한 XML처럼 뒤따라 오면 여전히 findViewById에 의해 발견되지 않습니다. 그리고 네, 각각의 자식 요소 (이 경우 버튼 만)가 부모 Tab3 요소의 경계 내에 배치되어야하는 위치를 결정하려면 onLayout을 구현해야합니다. –

+0

미안하지만 나는 그것이 의미하는 것을 이해하지 못한다. 나 한테 설명 해줄 수 있니? –

+0

내 대답에 내 첫 번째 샘플 XML 코드를 참조하십시오. 첫 번째 태그는'Tab3' 요소를 끝내지 않습니다. ('/'대신에'>'로 끝나며'Button' 태그 이후에 태그가 있습니다.)'Button' 엘리먼트는 자식이고, 형제 자매 'Tab3'. –

답변

2

, 사용자 정의보기 버튼을 포함하지 않는다; 그것은 형제 자매입니다. 앱이 다운되는 이유는 findViewById(R.id.addZone)null을 반환하기 때문에 addZone.setOnClickListener(this)으로 전화하면 NullPointerException이 표시됩니다. 당신이 당신의 사용자 정의보기 버튼을 포함 할 경우, XML은 다음과 같이 보일해야합니다 :

<com.zone.manager.Tab3 
    android:id="@+id/tab3_display" 
    android:layout_width="fill_parent" 
    android:layout_height="620dp" > 

    <Button 
     android:id="@+id/addZone" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Add Zone" /> 

</com.zone.manager.Tab3> 

은 또한 당신의 Tab3 클래스 ViewGroup하지 View 확장해야합니다. 레이아웃을 수행하기 위해 코드를 작성해야하기 때문에 약간 복잡 할 수 있습니다. 버튼은 Tab3보기에도 표시됩니다.

편집

당신이 뭘 하려는지의 의견을 바탕으로, 위 방법을 사용하지 않는 것이 좋습니다. 대신 사용자 정의보기와 단추를 LinearLayout에 래핑해야합니다. 예를 들어, 다음의 배열은 화면의 좌측 하단 버튼을 넣어 및 tab3에 볼이 상기 영역 채울 것이다 : 다음

입술/layout.tab3.xml

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

    <com.zone.manager.Tab3 
     android:id="@+id/tab3_display" 
     android:layout_width="fill_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" /> 

    <Button 
     android:id="@+id/addZone" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:onClick="onAddZone" 
     android:text="Add Zone" /> 

</LinearLayout> 

을 클릭 프로세싱 로직을 Activity 클래스에서 볼 수있는 Tab3의 별도 메소드로 이동하십시오. (addZone()라고 가정합시다. Tab3 클래스는 OnClickListener을 구현해서는 안되며 View (위와 같음이 아님)을 확장해야합니다. 단추에 특성을 추가하면 OnClickListener을 단추에 추가 할 필요가 없습니다. 대신, 활동에 그 이름을 클릭 메서드를 구현해야합니다

private Tab3 mTab3; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.tab3); 
    mTab3 = (Tab3) findViewById(R.id.tab3_display); 
    // . . . 
} 

@Override 
/** 
* Called when a view with attribute android:onClick="onAddZone" 
* is clicked. 
* 
* @param view the view that was clicked. 
*/ 
public void onAddZone(View view) { 
    mTab3.addZone(); 
} 

를 버튼에 대한 코드에서 아무것도 없지만, 프레임 워크가 자동으로 와이어 모든 업 사용하여 반사 그래서 그의 onAddZone 방법 버튼을 클릭하면 액티비티가 호출됩니다.

+0

내 질문을 업데이트 한, 나는 당신이 말한대로했는데, 여전히'addZone.setOnClickListener'를 가지고 있다면 여전히 충돌하고있다. 어떤 아이디어? –

+0

@MichaelZeuner - 업데이트 및 의견을 바탕으로 답변을 업데이트했습니다. –

+0

버튼을 클릭하면 앱이 다운됩니다. –

관련 문제