2016-04-03 14 views
0

5つのボタンがあり、それぞれがTextViewを使用しています。ユーザーが変更できるボタンごとにonLongClickの後に「設定」ダイアログフラグメントを表示したい対応するTextView。 これは私が各onLongClick上のフラグメントを呼び出す方法です:Android:各リスナーに応じてダイアログの内容が変更されます

fm = getFragmentManager(); 
myFragment = new Fragment_Edit(); 

FirstButton.setOnLongClickListener(new View.OnLongClickListener() { 
      @Override 
      public boolean onLongClick(View v) { 
       myFragment.show(fm, "theFragment"); 
       return false; 
     } 
}); 

フラグメントは1のEditText、1つのボタン、およびデフォルトのコードを持っています。 最初のボタンの下にあるTextViewを変更するためにFirstButtonをクリックすると表示されるダイアログのEditTextが必要です。 3番目のボタンをクリックして3番目のボタンの下のTextViewを変更すると表示されるダイアログのEditTextは、ポイントを取得します。詳細な説明を歓迎します。

EDIT:5つの断片

答えて

0

を作成することなく、ここにあなたが何ができるかです:

  1. を取得、その後、フラグメントIDを取得し、あなたのフラグメントに
  2. をのTextViewのIDを渡しますgetActivity()経由のテキストビューへの参照。以下のような

何かが働くだろう:

fm = getFragmentManager(); 
myFragment = new Fragment_Edit(); 

FirstButton.setOnLongClickListener(new View.OnLongClickListener() { 
     @Override 
     public boolean onLongClick(View v) { 

      // Pass the id of view to fragment 
      Bundle data = new Bundle(); 
      data.putInt("id", v.getId()); 
      myFragment.setArgument(data); 

      myFragment.show(fm, "theFragment"); 
      return false; 
    } 
}); 
あなたのフラグメントの onCreate()で次に

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

    // Get the data 
    if (getArguments() != null) { 

     Bundle data = getArguments(); 
     int id = data.getInt("id"); 

     // Get the corresponding textview from parent activity 
     textView = (TextView) getActivity().findViewById(id); 
    } 
} 

あなたがこのアプローチに親のTextViewを設定するか、またはインターフェイスを設定しますは、親アクティビティと通信します。第2の(インタフェース)アプローチが必要かどうかを教えてください。


UPDATE:

[OK]を、私はステップによって、この設計ステップをご案内します。

  1. はちょうどあなたのようなあなたのフラグメントでTextViewを宣言しますEditTextため。ですから、private TextView textView;

  2. のtextViewを上記のコードと同じように初期化します。

  3. ここであなたのEditTextさんはどこに参加しますか?これは、ユーザーからテキストを取得するために使用されます。 EditTextに入力したテキストユーザーを使用してtextViewを設定します。したがって、次のようなもの:

    String newText = editText.getText().toString();

    textView.setText(newText);


ですから、それは今働いてんだ、とはいあなたはすべてのボタンに同じことを行う必要があります。何ができることはあなたのために仕事をしてメソッドを記述し、ちょうどあなたがしたいボタンに渡しです:

private void addOnClickListener(Button button, myFragment) { 
    button.setOnLongClickListener(new View.OnLongClickListener() { 
     @Override 
     public boolean onLongClick(View v) { 

      // Pass the id of view to fragment 
      Bundle data = new Bundle(); 
      data.putInt("id", v.getId()); 
      myFragment.setArgument(data); 

      myFragment.show(fm, "theFragment"); 
      return false; 
    } 
}); 

は、それからちょうど行います

addOnClickListener(FirstButton, myFragment); 
addOnClickListener(SecondButton, myFragment); 

などを。

+0

答えのおかげで、正しい方法のようですが、私はそれについていくつか質問があります。あなたが 'data.putString(" id "、v.getId());と言ったら、それはButtonのビューのIDを渡しませんか?私はこれを 'String.valueOf(FirstText.getId()))'に変更しました。さらに、この 'myFragment.setArgument(data);'はエラーを返します –

+0

私のお詫びは 'data.putInt( "id"、v.getId()) ' –

+0

これはどのようなエラーですか? –

関連する問題