1

コンテキスト:カスタムリストビューがあり、各リストアイテムにはボタンがあります。ボタンをクリックするとalertDialogが表示され、編集テキストと送信ボタンが表示されます。これは最初のクリックでのみ発生し、その後のクリックではそれまでにクリックされた回数だけトーストが表示されます。Android- EditTextでカスタムアラートダイアログを修正するヘルプ

submitボタンをクリックすると、editTextに入力されたテキストとクリック回数が表示されます。これは最初のクリックでのみ発生する可能性があるため、常に1になります。

問題:「submit」をクリックする前にeditTextをクリックするほど、timesClickedカウンタが正しく動作しません。それは0に戻っていますね。しかし、ユーザがでなければをクリックしてください。編集テキストをクリックすると、プログラムは正常に動作します。 0_o私は迷っています。

解決しようとする試み:問題を特定して特定するためにコードを単純化しました。これが私が立ち往生した場所です。もともと私は、テキストを編集しただけのビューを膨張させていました。そして、私は単にbuilder.setPositiveButttonを使っていました。私は、ビューに直接ボタンを実装するとそれを修正すると思ったが、そうではないようだ。私はしばらくこれに固執しています。すべてのヘルプは、ダイアログを拡張するクラスを作ることができ

Here is a video of the bug happening

private class OnSubtractClickListener implements View.OnClickListener { 

    final int id; //id of list item that was clicked 
    int timesClicked; 
    Toast toast; 

    public OnSubtractClickListener(int id, View view) { 
     super(); 
     this.id = id; 
     timesClicked = 0; 
    } 

@Override 
    public void onClick(View view) { 
     if (timesClicked != 0) { 
      toast.setText(Integer.toString(timesClicked)); 
      toast.show(); 
     } 
     else{ 
      toast = Toast.makeText(view.getContext(), "", Toast.LENGTH_SHORT); 
      final View dialogView = LayoutInflater.from(view.getContext()).inflate(R.layout.dialog_add_notes, null); 

      AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext()); 
      builder.setView(dialogView); 
      builder.setTitle("Subtract cigar?"); 
      builder.setIcon(R.mipmap.monkey_launcher); 
      final AlertDialog dialog = builder.create(); 

      Button yesButton = (Button)dialogView.findViewById(R.id.dialog_notes_yes_button); 
      yesButton.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        EditText editText = (EditText)dialogView.findViewById(R.id.dialog_editText); 
        String userInput = editText.getText().toString(); 
        String timesClickedString = Integer.toString(++timesClicked); 
        toast.setText(timesClickedString + ": " + userInput); 
        toast.show(); 
        dialog.dismiss(); 
       } 
      }); 

      dialog.show(); //new 
     } 
    } 
} 
+1

ためには、あなたがしなければならず、0に戻ってクリックどこかでクリックリスナーを再作成してください。あなたのコードでクリックリスナーをどこに設定しているかを表示できますか? – AdamMc331

+0

これは、ユーザーがダイアログ内のeditTextをクリックしたときにのみリセットされます。それ以外の場合は正常に動作します。私はcustomlistAdapterのbindViewに設定しています – Dillon

+0

誰も問題を知らないのですか?私のアプリケーションでは、データベースが呼び出されており、リストビューが更新されています。しかし、リストビューは実際に元の状態に戻ります。ただし、データベースは更新されています。意味がありません。リストビュー項目への変更を取り消すことができるものはありますか – Dillon

答えて

0

素晴らしいことです。

例:

public class CustomDialog extends Dialog { 
    private EditText editText;   

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

    WindowManager.LayoutParams lpWindow = new WindowManager.LayoutParams(); 
    lpWindow.flags = WindowManager.LayoutParams.FLAG_DIM_BEHIND; 
    lpWindow.dimAmount = 0.8f; 
    getWindow().setAttributes(lpWindow); 

    setContentView(R.layout.activity_custom_dialog); 
    editText = (EditText) findViewById(R.id.editText);   
    } 
} 

あなたはこのダイアログを使用することができます。..

mCustomDialog = new CustomDialog(); 
mCustomDialog.show(); 

あなたが望むようにあなたは、レイアウトを作ることができます。

============================================== ============================

AlertDialog.Builder.setPositiveButtonを使用できます。

サイト:setPositiveButton

例...

toast = Toast.makeText(view.getContext(), "", Toast.LENGTH_SHORT); 
final View dialogView = LayoutInflater.from(view.getContext()).inflate(R.layout.dialog_add_notes, null); 
AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext()); 
     builder.setView(dialogView); 
     builder.setTitle("Subtract cigar?"); 
     builder.setIcon(R.mipmap.monkey_launcher); 
     builder.setPositiveButton("text", new DialogInterface.OnClickListener() { 

      @Override 
      public void onClick(DialogInterface dialogInterface, int which) { 
       EditText editText = (EditText)dialogView.findViewById(R.id.dialog_editText); 
       String userInput = editText.getText().toString(); 
       String timesClickedString = Integer.toString(++timesClicked); 
       toast.setText(timesClickedString + ": " + userInput); 
       toast.show(); 
      } 
     }); 
     final AlertDialog dialog = builder.create(); 
     dialog.show(); //new 
+0

お試しいただきありがとうございますが、これは私が探していたものではありません。ダイアログ内にeditTextを作成する際に問題はありません。その部分は簡単です。私の問題は、ユーザーがeditTextをクリックすると仮想キーボードが現れることです。ダイアログボックスが閉じた後、listViewに何が変更されたかがわかります。リセットされます。 – Dillon

+0

もう一度お試しいただきありがとうございますが、問題はeditTextでダイアログを作成していないことです。私は問題が何かを見つけ出し、今晩後に投稿する予定の解決策を思いつきました。基本的に何が起こったのかは、キーボードが現れたときに、リストビューが、ダイアログが現れる前のリストアイテムの再サイクリングされた/古いバージョンでリストビュー全体を再現するように調整するというものでした。 。 – Dillon

0

は私が解決策を見つけました。基本的に何が起こったのかは、キーボードが現れたときに、リストビューがリサイズされた以前のリストアイテムのリサイクル/古いバージョンでリストビュー全体を再現するようにリストビューを変更するというものでした。 。あなたのリストビューのXMLで

これを追加します。

アンドロイド:descendantFocusability = "beforeDescendants"

Mainfest.xmlで

:回

<activity android:name= ".yourActivity"  
android:windowSoftInputMode="adjustPan"/> 
関連する問題