Ich arbeite an einer Anwendung, die einem Benutzer erlaubt zu unterzeichnen.Call-Methode in Sicht von Dialogfeldfragment
Ich hatte eine Hauptaktivität und wenn ich auf einen Knopf auf meiner Hauptaktivität klicke, wird eine Leinwandansicht geladen. Auf dieser Leinwand hatte ich verschiedene Methoden wie "Clear Canvas", um meine Leinwand nach dem Zeichnen zu löschen.
Ich habe jedoch vor kurzem das Layout, das die Canvas-Ansicht aufgerufen hat, in einen Dialog eingefügt.
Seitdem kann ich nicht auf meine Methoden in der Ansicht zugreifen.
View.OnClickListener myhandler1 = new View.OnClickListener() {
public void onClick(View v) {
((CanvasView)getView()).clearCanvas(); //Error here
}
};
Fehler
java.lang.ClassCastException: android.widget.FrameLayout cannot be cast to signaturepad.CanvasView
Aktivität Main (Achten Sie auf die letzte Taste ruft es unser Fragment)
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");
}
});
}
}
Dies ist unser Dialog Fragment mit dem Verfahren den ich versuche, den Zugang von die Ansicht 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(); }
*/
}
Hat Ihr CanvasView eine ID? – Distwo
Sie übertragen das gesamte Layout auf CanvasView. Ich nehme an, dass es in Ihrem Layout eine CanvasView gibt? Bitte posten Sie den Inhalt von R.layout.newsignature_layout – burntsugar