私はユーザーが署名できるアプリケーションを開発中です。ダイアログのフラグメントのビューからメソッドを呼び出す
私は主なアクティビティを持っていました。メインアクティビティのボタンをクリックすると、キャンバスビューが読み込まれます。このキャンバスには、私がキャンバスを描いた後にキャンバスをクリアするために「クリアキャンバス」のように使うことができるさまざまな方法がありました。
しかし、最近、キャンバスビューを呼び出すレイアウトをダイアログに入れました。
これ以降、ビュー内のメソッドにアクセスできません。
View.OnClickListener myhandler1 = new View.OnClickListener() {
public void onClick(View v) {
((CanvasView)getView()).clearCanvas(); //Error here
}
};
エラー
java.lang.ClassCastException: android.widget.FrameLayout cannot be cast to signaturepad.CanvasView
活動メイン(それが私たちのフラグメントを呼び出し、最後のボタンに注意してください)
public class MainActivity extends AppCompatActivity {
final Context context = this;
Button dfragbutton;
Button alertdfragbutton;
FragmentManager fm = getSupportFragmentManager();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button) findViewById(R.id.otherdialog);
// add button listener
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// custom dialog
final Dialog dialog = new Dialog(context);
dialog.setContentView(R.layout.signature_layout);
dialog.setTitle("Title...");
TextView text = (TextView) dialog.findViewById(R.id.text);
text.setText("Android custom dialog example!");
ImageView image = (ImageView) dialog.findViewById(R.id.image);
image.setImageResource(R.drawable.androidhappy);
dialog.show();
}
});
Button sign_btn = (Button) findViewById(R.id.sign_btn);
sign_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent Intent = new Intent(view.getContext(), CanvasActivity.class);
view.getContext().startActivity(Intent);
}
});
dfragbutton = (Button) findViewById(R.id.dfragbutton);
// Capture button clicks
dfragbutton.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
DFragment dFragment = new DFragment();
// Show DialogFragment
dFragment.show(fm, "Dialog Fragment");
}
});
}
}
これは私がからアクセスしようとしています方法で私たちのダイアログ断片でありますビューCanvasView。
public class DFragment extends DialogFragment {
private CanvasView customCanvas;
Button clearButton;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.newsignature_layout, container,
false);
getDialog().setTitle("DialogFragment");
// Do something else
Button clearCanvas = (Button)rootView.findViewById(R.id.newbutton1);
clearCanvas.setOnClickListener(myhandler1);
return rootView;
}
View.OnClickListener myhandler1 = new View.OnClickListener() {
public void onClick(View v) {
((CanvasView)getView()).clearCanvas(); //Error here
}
};
/*
public void clearCanvas(View v) { customCanvas.clearCanvas(); }
*/
}
あなたのCanvasViewはIDを持っていますか? – Distwo
レイアウト全体をCanvasViewにキャストしています。あなたのレイアウトにCanvasViewがあると思いますか? R.layout.newsignature_layoutの内容を投稿してください – burntsugar