2016-09-23 19 views
0

DialogFragmentを表示するカスタムLinearLayoutを実装しようとしています。私はすべてをして、それは素晴らしいです、ダイアログが表示され、完全に動作していますが、私はDialogFragmentからデータを取得することはできません。私はDialogCommunicatorインタフェースを実装し、このやったカスタムLinearLayout呼び出しメソッド

public interface DialogCommunicator {void onDismiss(String format, String data);} 

のLinearLayoutの場合:私はこれをしなかったDialogFragmentで

public class CustomLayout extends LinearLayout implements DialogCommunicator, View.OnClickListener { 

Button showDialog; 
TextView displayUserInput; 

CreateDialog dialog; 

public CustomLayout(Context context) { 
    super(context); 
} 

public CustomLayout(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

public CustomLayout(Context context, AttributeSet attrs, int defStyleAttr) { 
    super(context, attrs, defStyleAttr); 
} 

@Override 
protected void onFinishInflate() { 
    super.onFinishInflate(); 

    showDialog = (Button) findViewById(R.id.showDialog); 
    displayUserInput = (TextView) findViewById(R.id.displayUserInput); 

    showDialog.setOnClickListener(this); 
} 

@Override 
public void onDismiss(String format, String data) { 
    dialog.dismiss(); 
    someMethod(format, data); 
} 

private void someMethod(String format, String data) { 
    displayUserInput.setText(format + data); 
} 

@Override 
public void onClick(View v) { 
    AppCompatActivity activity = (AppCompatActivity) getContext(); 
    dialog = new CreateDialog(); 
    dialog.show(activity.getSupportFragmentManager(), "Mydialog"); 
}} 

が、活動がある

は、だから私は、インターフェイスを作成しましたオールウェイズはnull:

public class CreateDialog extends DialogFragment implements DialogCommunicator, View.OnClickListener { 

View view; 
String format, data; 
Button create; 
EditText userFormat, userData; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    view = inflater.inflate(R.layout.create_barcode, container); 
    userFormat = (EditText) view.findViewById(R.id.userFormat); 
    userData = (EditText) view.findViewById(R.id.userData); 
    create = (Button) view.findViewById(R.id.create); 
    create.setOnClickListener(this); 

    return view; 
} 


@Override 
public void onDismiss(String format, String data) { 
    RTToolbarHorizontalLayout layout = (RTToolbarHorizontalLayout) getHost(); 
    if (layout != null) { 
     layout.onDismiss(format, data); 
    } 
} 

@Override 
public void onClick(View v) { 
    format = userFormat.getText().toString(); 
    data = userData.getText().toString(); 

    onDismiss(format, data); 
} 
} 

私はのgetContext()、getDialog()、はGetHost()BUを試してみましたそれらはすべてnullです。

+0

はあなたがすべてのコードを追加することができますが、 – Stefan

+0

それがより明確になります私は、全体のクラスを追加しました。 –

答えて

0

私はブロードキャストレシーバを使用していますので、DialogFragmentからレイアウトにデータを送信します。ここで

public class CustomLayout extends LinearLayout implements View.OnClickListener { 

Button showDialog; 
TextView displayUserInput; 

CreateDialog dialog; 

BroadcastReceiver receiver = new BroadcastReceiver() { 
    String format = null; 
    String data = null; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (intent.getStringExtra("format") != null) 
      format = intent.getStringExtra("format"); 
     if (intent.getStringExtra("barcode") != null) 
      data = intent.getStringExtra("barcode"); 
     if (format != null && data != null) { 
      someMethod(format, data); 
      format = null; 
      data = null; 
     } 
    } 
}; 

public CustomLayout(Context context) { 
    super(context); 
    getContext().registerReceiver(receiver, 
      new IntentFilter("com.exemple.myapplication.DATA_SEND")); 
} 

@Override 
protected void onDetachedFromWindow() { 
    super.onDetachedFromWindow(); 
    getContext().unregisterReceiver(receiver); 
} 

@Override 
protected void onFinishInflate() { 
    super.onFinishInflate(); 

    showDialog = (Button) findViewById(R.id.showDialog); 
    displayUserInput = (TextView) findViewById(R.id.displayUserInput); 

    showDialog.setOnClickListener(this); 
} 

private void someMethod(String format, String data) { 
    displayUserInput.setText(format + data); 
} 

@Override 
public void onClick(View v) { 
    AppCompatActivity activity = (AppCompatActivity) getContext(); 
    dialog = new CreateDialog(); 
    dialog.show(activity.getSupportFragmentManager(), "MyDialog"); 
}} 

DialogFragmentで実装されています:ここでCustomLayoutがある

public class CreateDialog extends DialogFragment implements View.OnClickListener { 



View view; 
String format, data; 
Button create; 
EditText userFormat, userData; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    view = inflater.inflate(R.layout.create_barcode, container); 
    userFormat = (EditText) view.findViewById(R.id.userFormat); 
    userData = (EditText) view.findViewById(R.id.userData); 
    create = (Button) view.findViewById(R.id.create); 
    create.setOnClickListener(this); 

    return view; 
} 

@Override 
public void onClick(View v) { 
    format = userFormat.getText().toString(); 
    data = userData.getText().toString(); 

    Intent i = new Intent("com.exemple.myapplication.DATA_SEND"); 
    i.putExtra("format", format); 
    i.putExtra("data", data); 

    getContext().sendBroadcast(i); 
}} 
関連する問題