2014-12-01 2 views
0

메인 이벤트의 활동 표시 줄에서 트리거되는 팝업 창이 있습니다. 팝업 창의 버튼은 showPopup()에서 각각의 리스너를 트리거하지 않습니다. 이 popupWindow 구조체의 대부분은 조각에서 시작될 때 잘 작동합니다. 나는 이것의 근본 원인을 밝힐 수 없다. 어떤 제안? 감사.Android ClickListeners가 PopupWindow에서 실행되지 않습니다.

public class MainActivity extends Activity{ 
private final static String TAB_KEY_INDEX = "TAB_KEY"; 
public static Context appContext; 
private PopupWindow popupWindow; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    appContext = getApplicationContext(); 
    //put Actionbar in tab mode  
    ActionBar actionBar = getActionBar(); 
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);    
    //set titles for tabs 
    ActionBar.Tab tab1 = actionBar.newTab().setText("Tab1"); 
    //create instances of each of the fragments 
    Fragment tab1Fragment = new Tab1Fragment(); 
    //attach those fragment instances to their respective tabs 
    tab1.setTabListener(new MyTabsListener(tab1Fragment)); 
    //add each tab to the ActionBar 
    actionBar.addTab(tab1); 
    if (savedInstanceState == null){//...do nothing      
    }else if (savedInstanceState != null){ 
    actionBar.setSelectedNavigationItem(savedInstanceState.getInt(TAB_KEY_INDEX,0)); 
    } 
} 
@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch(item.getItemId()) { 
     case R.id.menuitem_popup: 
      showPopup(); 
      return true; 
    }return false; 
} 
@Override 
public boolean onCreateOptionsMenu(Menu menu){ 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.main, menu); 
    return true; 
} 
@Override 
protected void onSaveInstanceState(Bundle outState){ 
    super.onSaveInstanceState(outState); 
    outState.putInt(TAB_KEY_INDEX, getActionBar().getSelectedNavigationIndex()); 
} 
private void showPopup() { 
    Button btnDismiss, btnSaveRecord; 
    try { 
    LayoutInflater layoutInflater = (LayoutInflater) MainActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View layout = layoutInflater.inflate(R.layout.popup_layout, null); 
    popupWindow = new PopupWindow(layout, 580, 500, true); 
    popupWindow.showAtLocation(layout, Gravity.CENTER, 0, 40); 

    btnDismiss=(Button)MainActivity.this.findViewById(R.id.btnDismissxml); 
    btnDismiss.setOnClickListener(new OnClickListener() { 
     //@Override 
     public void onClick(View arg0) { 
      popupWindow.dismiss(); 
     } 
    }); 
    btnSaveRecord=(Button)MainActivity.this.findViewById(R.id.btnSaveRecordxml); 
    btnSaveRecord.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View arg0) { 
      saveRecord(); 
     } 
    }); 
    } catch (Exception e) { 
    e.printStackTrace(); 
    } 
    } 
public void saveRecord(){ 
    Toast.makeText(MainActivity.this.getApplicationContext(), "Event saveRecord() triggered.", Toast.LENGTH_SHORT).show();  
} 
} 

여기 요청마다 popup_layout.xml이 있습니다. 감사. btnDismissxmlbtnSaveRecordxml가 팝업 창에서 버튼이

<?xml version="1.0" encoding="utf-8"?> 
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:gravity="center_horizontal" 
android:background="@drawable/customborder"> 
<TableRow> 
<TextView 
    android:id="@+id/tv" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="This is Fragment3" /> 
</TableRow> 

<TableRow> 
<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Species:" /> 
<EditText 
     android:id="@+id/textboxSpeciesxml" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
        android:layout_span="3" 
     android:text="(table is empty)"/> 

    </TableRow> 

    <TableRow> 
      <Button 
      android:id="@+id/btnSaveRecordxml" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="SAVE" /> 
      <Button 
      android:id="@+id/btnUpdateRecordxml" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="UPDATE" /> 
      <Button 
      android:id="@+id/btnDeleteRecordxml" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="DELETE" /> 
      <Button 
      android:id="@+id/btnClearFormxml" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="CLEAR" /> 
     </TableRow> 
    <TableRow> 
      <Button 
      android:id="@+id/btnFirstRecordxml" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="@string/pszFirstRecordButton"/> 
      <Button 
      android:id="@+id/btnPreviousRecordxml" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="@string/pszPreviousRecordButton"/> 
      <Button 
      android:id="@+id/btnNextRecordxml" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="@string/pszNextRecordButton"/> 
      <Button 
      android:id="@+id/btnLastRecordxml" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="@string/pszLastRecordButton"/> 
     </TableRow> 
    <TableRow> 
     <Button 
      android:id="@+id/btnPurgeTablexml" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_span="2" 
      android:text="Purge Table!" /> 
      <Button 
      android:id="@+id/btnDismissxml" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
         android:layout_column="3" 
      android:text="Dismiss" /> 
    </TableRow> 
</TableLayout>  
+0

'btnDismissxml' 및'btnSaveRecordxml'이 팝업 창에 있습니까? –

+0

예 그들은 ... – portsample

답변

0

경우 layout.findViewById보다는 MainActivity.this.findViewById를 사용하여 찾을 수 있습니다. 다음 코드를 사용하십시오 :

View layout = (TableLayout) layoutInflater.inflate(R.layout.popup_layout, null); 
// ... 

btnDismiss=(Button) layout.findViewById(R.id.btnDismissxml); 
btnDismiss.setOnClickListener(new OnClickListener() { 
    // ... 
}); 
btnSaveRecord=(Button) layout.findViewById(R.id.btnSaveRecordxml); 
btnSaveRecord.setOnClickListener(new OnClickListener() { 
    // ... 
}); 
+0

변경되지 않습니다. 어느 이벤트도 트리거되지 않았습니다. 잘 시도해주세요 ... – portsample

+0

@portsample 팝업 레이아웃의 'xml'을 추가하십시오. –

+0

@portsample 답변이 수정되었습니다. 레이아웃을'TableLayout'으로 캐스팅하고 결과를 알려주세요 –

관련 문제