2014-03-06 2 views
0

나는 AlertDialog.Builder을 이미 final으로 설정했습니다.withClick withClickListener에서 대화 상자를 닫는 방법

대화 상자 안에 버튼이 있는데,이 버튼을 클릭하면 사용자를위한 구매가 이루어진 다음 닫힙니다. '닫음'부분에 문제가 있습니다.

Button buyButton = new Button(context); 
    LinearLayout.LayoutParams buttonParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 100, 0.0f); 
    buyButton.setLayoutParams(buttonParams); 
    buyButton.setOnClickListener(new Button.OnClickListener() { 
     @Override 
     public void onClick(View view){ 
      if (STOCK_TO_PURCHASE.size() != 0) { 
       Player thisPlayer = players[getPlayerIndexByPlayOrder(CURRENT_TURN)]; 
       purchaseStock(thisPlayer); 
       buyStockDialog.dismiss(); 
      } else { 
       buyStockDialog.dismiss(); 
      } 
     } 
    }); 

이 IDE는 나를 말하고 내가 buyStockDialog을 타입 변환해야 다음은 버튼에 대한 코드입니다. 그래도 타입 변환하면 런타임 오류가 발생하여 buyStockDialog에서 DialogInterface으로 변환 할 수 없다는 메시지가 나타납니다.

이 문제를 해결하는 가장 좋은 방법은 무엇입니까?

나는 이미 사용자 정의 onBackPressed 메서드를 가지고 있으며 응용 프로그램이 뒤로 버튼을 모방 한 것처럼 만드는 것을 고려합니다. 여기서 가장 좋은 해결책은 무엇이라고 생각하십니까? 요청에 따라에 AlertDialog.Builder에 대한

선언 라인 : 두 번째 요청에 따라

ContextThemeWrapper ctw = new ContextThemeWrapper(this, R.style.AppTheme); 
    final AlertDialog.Builder buyStockDialog = new AlertDialog.Builder(ctw); 
    buyStockDialog.setTitle("Buy Stock: "); 

는, 전체 대화의 코드와 레이아웃 :

public void buyStock(View view){ 
    Context context = getApplicationContext(); 
    ContextThemeWrapper ctw = new ContextThemeWrapper(this, R.style.AppTheme); 
    final AlertDialog.Builder buyStockDialog = new AlertDialog.Builder(ctw); 
    buyStockDialog.setTitle("Buy Stock: "); 

    //create ScrollView to hold everything 
    ScrollView scrollView = new ScrollView(context); 

    //generate content for dialog  
    LinearLayout dialogContainer = new LinearLayout(context); 
    dialogContainer.setOrientation(LinearLayout.VERTICAL); 
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 350, 1); 
    params.gravity = Gravity.CENTER; 
    dialogContainer.setLayoutParams(params); 
    dialogContainer.setPadding(15, 15, 0, 15); 
    dialogContainer.setBackgroundColor(Color.WHITE); 

    //each hotel stock options 
    for (int i = 0; i < hotels.size(); i++) { 
     Hotel testHotel = hotels.get(i); 
     testHotel.setPrice(200); 
     View stockPicker = getStockPicker(testHotel); 
     LinearLayout.LayoutParams pickerParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, 75, 1.0f); 
     pickerParams.gravity = Gravity.LEFT; 
     stockPicker.setLayoutParams(pickerParams); 
     dialogContainer.addView(stockPicker); 
     stockPicker.setBackgroundColor(0xffffff); 
    } 

    LinearLayout scrollWrapper = new LinearLayout(context); 
    scrollWrapper.addView(scrollView); 
    scrollWrapper.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 300, 1.0f)); 

    scrollView.addView(dialogContainer); 
    scrollView.setLayoutParams(params); 

    LinearLayout dialogLayout = new LinearLayout(context); 
    dialogLayout.setOrientation(LinearLayout.VERTICAL); 
    dialogLayout.setBackgroundColor(Color.WHITE); 

    Button buyButton = new Button(context); 
    LinearLayout.LayoutParams buttonParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 100, 0.0f); 
    buyButton.setLayoutParams(buttonParams); 
    buyButton.setOnClickListener(new Button.OnClickListener() { 
     @Override 
     public void onClick(View view){ 
      if (STOCK_TO_PURCHASE.size() != 0) { 
       Player thisPlayer = players[getPlayerIndexByPlayOrder(CURRENT_TURN)]; 
       purchaseStock(thisPlayer); 
       buyStockDialog.dismiss(); 
      } else { 
       buyStockDialog.dismiss(); 
      } 
     } 
    }); 

    dialogLayout.addView(scrollWrapper); 
    dialogLayout.addView(buyButton); 

    buyStockDialog.setView(dialogLayout); 

    buyStockDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {   
     @Override 
     public void onCancel(DialogInterface dialog) { 
      int numInterations = STOCK_TO_PURCHASE.size(); 
      for (int i = 0; i < numInterations; i++) { 
       STOCK_TO_PURCHASE.remove(0); 
      } 
     } 
    }); 

    buyStockDialog.show(); 

} 
+0

을 buyStockDialog입니다 AlertDialog.Builder? – Blackbelt

+0

buyStockDialog에 대한 선언 행을 포함시킬 수 있습니까? – NameSpace

+0

선언 라인을 추가했습니다 –

답변

1

A가 들어에 AlertDialog의 차이,가 dismiss() 함수. 경고 대화 상자의 빌더 패턴 인 AlertDialog.Builder. 당신이 대화 상자를 표시하려고 할 때 당신은 당신이 해고를 호출해야하는 일이

buyStockDialog.create()

반환 값 호출합니다.

ContextThemeWrapper ctw = new ContextThemeWrapper(this, R.style.AppTheme); 
AlertDialog.Builder buyStockDialog = new AlertDialog.Builder(ctw); 
buyStockDialog.setTitle("Buy Stock: "); 
final Dialog dialog = builder.create(); 

그리고 당신의 클릭 리스너 내부 당신은 당신이 호출 대화 기각 할 :

+0

유효한 노력 이었지만 buyStockDialog.create(). dismiss()가 작동하지 않습니다. 그것은 나에게 어떤 오류도주지 않지만 또한 대화 상자를 닫지 않습니다. –

+0

이제는 표시하지 않고 대화 상자를 닫지 않는 새 대화 상자를 작성하기 때문입니다. 대화 상자를 표시하는 장소에서 이미 buyStockDialog.create(). show()를 호출 한 곳입니다. 그것이 당신이주의해야 할 대상입니다. buyStockDialog는 빌더입니다. 그것은 중요하지 않습니다. 기억하지 않거나 첫 번째 창조물이 아닌 다른 것을 사용하려고 시도해서는 안됩니다. – JasonOfEarth

0

당신은 당신이 당신의 대화 선언 할 경우 같은 것을 할 필요가

dialog.dismiss(); 
관련 문제