2016-10-19 6 views
0

私はデータベースから何かを削除する方法があります。私はユーザーの確認を取得したい。それを行うために、私はブール関数を実装して、ダイアログで確認を取得します。ダイアログメッセージボタンはコード内に何もしませんか?

私の問題は、私がはいといいえを選ぶかどうかは関係なく、私はいつも同じ偽の結果を得ることです。

(私はエラーを取得[] beacuseそうでない場合、最終的なブール値を使用)

これはメソッドです:

public boolean alertMessage() { //Confirmation to delete routine 
    final boolean[] confirmation = {false}; 
    DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int which) { 
      switch (which) { 
       case DialogInterface.BUTTON_POSITIVE: 
        // Yes button clicked 
        confirmation[0] =true; 
        break; 
       case DialogInterface.BUTTON_NEGATIVE: 
        // No button clicked 
        // do nothing 
        confirmation[0]=false; 
        break; 
      } 
     } 
    }; 

    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setMessage(R.string.sure_delete) 
      .setPositiveButton(R.string.yes, dialogClickListener) 
      .setNegativeButton(R.string.no, dialogClickListener).show(); 
    return confirmation[0]; 
} 

そして、これは私が私の削除コードでそれを確認する方法です:

//CONFIRMATION 
if(!alertMessage()){ 
return; 
} 

更新: これは1つの回答候補でお試しくださいが、それでも同じです:

public boolean alertMessage() { //Confirmation to delete routine 
    final boolean[] confirmation = {false}; 
    new AlertDialog.Builder(this) 
      .setTitle(R.string.delete) 
      .setMessage(R.string.sure_delete) 
      .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
        confirmation[0]=true; 
       } 
      }) 
      .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
        confirmation[0]=false; 
       } 
      }) 
      .setIcon(android.R.drawable.ic_dialog_alert) 
      .show(); 
    return confirmation[0]; 
} 

私はエラーを取得するだけで、ブールとbecuase []最後のブールを置く:

"Variable is accessed from within an inner class, needs to be declared final." 

そして、私はそれが最終的に宣言一度:

"Can not assign a value to final variable" 

だから私はにそれを変換する必要があります配列。 私はブール値のメソッドにしたいと思いますし、他のメソッドで再利用したいので、 "yes"の中にdeleteを実装しません。あなたが望むとおり

+0

愚かな質問が、なぜあなたはboolean型の配列を使用していますか? – compte14031879

+1

これを試してください。次のリンクに従ってメソッドを使用し、ポジティブボタンの実装内で削除することをお勧めします。 http://stackoverflow.com/questions/2115758/how-do-i-display-an-alert-dialog-on-android – vidulaJ

+0

@FrédéricLetellier:私はこれが行われていると思われます。なぜなら、 'final boolean'を使用して、値を変更することはできませんが、配列内の値は変更できます。 –

答えて

0

、同じリストの貴様要素に貴様アクションの同じダイアログボックス:

public final static TAG_UPDATE = "update"; 
public final static TAG_DELETE = "delete"; 

public void alertMessage(String id, String actionTag) { //the same call for all elements of a list 
final String mIdElement = idElement; 
final String mActionTag = actionTag; 

new AlertDialog.Builder(this) 
     .setTitle(R.string.confirmation) 
     .setMessage(R.string.sure_confirmation) 
     .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
       makeSomething(mIdElement, mActionTag); 
      } 
     }) 
     .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
       //no-op 
      } 
     }) 
     .setIcon(android.R.drawable.ic_dialog_alert) 
     .show(); 
} 

public void makeSomething(String idElement, String actionTag){ 
    switch(actionTag) { 
     case TAG_UPDATE : 
      // your update code to update the id element 
      break; 
     case TAG_DELETE : 
      // your delete code to delete the id element 
      break; 
    } 
} 
+0

これは機能しますが、別の目的で確認ダイアログを再利用したい場合、私はできませんそれ。 – nck

+0

リストの要素を削除する場合は、すべての要素に対して同じダイアログが表示されます。パラメータ(ex:要素のid)を持つメソッドを呼び出し、これらのパラメータをdeleteメソッドに渡します。異なる要素に対して同じダイアログを使用したい場合、多分あなたは悪い方向にいるでしょう。 – compte14031879

+0

「更新」、「削除」、「追加」などの異なるアクションで同じダイアログを使用する場合は、プライベートboolean showConfirmationDialog(文字列メッセージ)。 私はこのようにすることはできません。 – nck

1

ダイアログを表示したときにあなたのコードが実行を停止しませんので、あなたの方法がするので、これはそれが割り当てられたデフォルト値であるので、常にfalseを返します。削除の確認を求める最善の方法は、削除メソッドをダイアログのポジティブボタンの内側で呼び出させることです。

あなたがリストビューを持ち、アイテムをクリックしたときに削除したいとします。ここでそれをどうやってやるべきなのです。

public class MyActivity extends AppCompatActivity { 


    public ListViewCompat listView; 
    private List<Object> myObjects; 

    public void onCreate(Bundle savedinstance) { 
     super.onCreate(savedinstance); 
     setContentView(R.layout.activity_my_list); 

     listView = (ListViewCompat) findViewById(R.id.my_list_view); 
     //Set a listview adapter 

     listView.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view,int position, long id) { 
       showConfirmationDialog(position);   
      } 
     }); 
    } 

    private void showConfirmationDialog(int itemPosition) { 
     AlerDialog.Builder builder = new AlerDialog.Builder(this); 

     builder.setTitle("Confirmation"); 
     builder.setMessage("Delete item?") 
     builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
      deleteItem(itemPosition); 
     }); 
     builder.setNegativeButton("No", null); 

     builder.create().show(); 
    } 

    private void deleteItem(int itemPosition) { 
     //Delete item 
     myObjects.remove(itemPosition); 
    } 
} 
+0

フレデリックの答えと同じですが、うまくいかないダイアログを再利用したいのですが。 – nck

+0

ダイアログのメソッド内で作成され、別のメソッドで呼び出す方法がないため、この場合は問題ではないと思います –

0

てみ使用インターフェース:

public class MainActivity extends AppCompatActivity implements DialogInterface.OnClickListener { 

    private static final String TAG = MainActivity.class.getSimpleName(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Log.e(TAG, "onCreate"); 
     setContentView(R.layout.activity_main); 

     new AlertDialog.Builder(this) 
       .setTitle("Hello") 
       .setMessage("World") 
       .setPositiveButton(android.R.string.yes, this) 
       .setNegativeButton(android.R.string.no, this) 
     .show(); 

    } 

    @Override 
    public void onClick(DialogInterface dialog, int which) { 
     switch(which) { 
      case DialogInterface.BUTTON_POSITIVE: 
       Log.d(TAG, "Ok"); 
       break; 
      case DialogInterface.BUTTON_NEGATIVE: 
       Log.d(TAG, "Cancel"); 
       break; 
     } 

    } 
} 
関連する問題