2017-09-07 61 views
0

我想實現一個自定義的ButtononClick功能Dialog但沒有發生的時候我在Button交房的butEditAdd的Android按鈕的onClick沒有做任何事情

MainActivity.java點擊:

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
fab.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     final AddDialog addDialog = new AddDialog(MainActivity.this); 
     addDialog.setContentView(R.layout.dialogedit); 
     final Button butEditAdd =(Button)addDialog.findViewById(R.id.buttonAdd); 
     //final Button butEditAdd=addDialog.getAdd(); 
     addDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); 
     butEditAdd.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       //addDialog.dismiss(); 
       Toast.makeText(getApplicationContext(),"It's working",Toast.LENGTH_SHORT).show(); 
      } 
     }); 
     addDialog.show(); 
    } 
}); 

addDialog.java:

public class AddDialog extends Dialog implements android.view.View.OnClickListener{ 

Activity a; 
Dialog d; 
Button add , cancel; 
RadioButton owes,lent ,money,things ; 
EditText name ,amount,object,note; 
Spinner spin; 

public AddDialog(Activity c) { 
    super(c); 
    this.a = c; 
} 

@Override 
public void onClick(View v){ 

}; 

@Override 
public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.dialogedit); 
    add=(Button)findViewById(R.id.buttonAdd); 
    cancel=(Button)findViewById(R.id.buttonCancel); 
    owes = (RadioButton)findViewById(R.id.radioButtonOwes); 
    lent = (RadioButton)findViewById(R.id.radioButtonLent); 
    money = (RadioButton)findViewById(R.id.radioButtonAmount); 
    things =(RadioButton)findViewById(R.id.radioButtonThings); 
    name = (EditText)findViewById(R.id.editName); 
    object = (EditText)findViewById(R.id.editTextWhat); 
    amount =(EditText)findViewById(R.id.editTextAmount); 
    note =(EditText)findViewById(R.id.editTextNote); 
    spin=(Spinner) findViewById(R.id.spinnerdevise); 

    owes.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(View view) { 
       lent.setChecked(false); 
     } 
    }); 
    lent.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(View view) { 
      owes.setChecked(false); 
     } 
    }); 
    money.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(View view) { 
      things.setChecked(false); 
      object.setEnabled(false); 
      amount.setEnabled(true); 
      spin.setEnabled(true); 
      object.setText(""); 

     } 
    }); 
    things.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(View view) { 
      money.setChecked(false); 
      object.setEnabled(true); 
      amount.setEnabled(false); 
      spin.setEnabled(false); 
      amount.setText(""); 
     } 
    }); 
    object.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(View view) { 
      things.performClick(); 
      things.setChecked(true); 
     } 
    }); 

    amount.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(View view) { 
      money.performClick(); 
      money.setChecked(true); 

     } 
    }); 

感謝您的幫助!

+0

試試這個:final Button butEditAdd =(Button)addDialog.findViewById(R.id.buttonAdd); –

+0

我認爲這是錯誤的實施方法,如果您使用對話框片段 – Anonymous

+0

好,那麼我需要怎麼做? – Jacko

回答

2

對話框片段具有單獨的一組生命週期。如果要創建類adddialog,則擴展對話框片段並在adddialog的oncreate中使用setcontent視圖。

如果您想創建簡單的對話框,請嘗試下面這行代碼。這將解決您的問題。

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      final Dialog addDialog = new Dialog(this); 
      addDialog.setContentView(R.layout.dialogedit); 
      final Button butEditAdd =(Button)addDialog.findViewById(R.id.btn); 
      //final Button butEditAdd=addDialog.getAdd(); 
      addDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); 
      butEditAdd.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        //addDialog.dismiss(); 
        Toast.makeText(getApplicationContext(),"It's working", Toast.LENGTH_SHORT).show(); 
       } 
      }); 
      addDialog.show(); 
     } 
    }); 
1

你需要像這樣

final Button butEditAdd =(Button)addDialog.findViewById(R.id.buttonAdd); 
+0

是的抱歉,我忘記了這一點,但即使與onClick沒有響應 – Jacko

+0

我不知道這似乎很好......我的對話工作是這樣的...也許有一些與背景有關嗎?嘗試刪除它可能用於測試? :P – nKalai

+0

它沒有改變任何東西,我的意思是它更醜陋,但仍然沒有迴應 – Jacko

0

使用this代替getApplicationContext()

+0

這是說「無法解決方法」 – Jacko

+0

請嘗試解釋你的代碼的作用。因此其他(未來)用戶也可以理解這種結構。 – loki

1

變化AddDialog到對話框

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      final Dialog addDialog = new Dialog(MainActivity.this); 
      addDialog.setContentView(R.layout.dialogedit); 
      final Button butEditAdd =(Button)addDialog.findViewById(R.id.buttonAdd); 
      addDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); 
      dialog.setCanceledOnTouchOutside(true); 
      butEditAdd.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        //addDialog.dismiss(); 
        Toast.makeText(getApplicationContext(),"It's working",Toast.LENGTH_SHORT).show(); 
       } 
      }); 
      addDialog.show(); 
     } 
    }); 
+0

這是一個自定義對話框,所以我有addDialog.java – Jacko

+0

你可以在那裏發佈addDialog類嗎? –

+0

結帳[this](http://www.coderzheaven.com/2013/02/13/extend-dialog-class-write-its-button-click-activity-interfaces-android/) –

0

你應該首先膨脹的佈局,然後找到其ID的看法。

LayoutInflater inflater = LayoutInflater.from(this); 
View dialogView = inflater.inflate(R.layout.dialogedit, null); 
final Button butEditAdd =(Button) dialogView.findViewById(R.id.buttonAdd); 

............. 

butEditAdd.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      //do something 
     } 
    }); 

這應該有效。

0

從你的對話框的onCreate()取下的setContentView(R.layout.dialogedit)

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
} 

而你的其餘代碼工作正常。