2017-03-08 1 views
0

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(); } 
*/ 
} 
+0

Hat Ihr CanvasView eine ID? – Distwo

+0

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

Antwort

0

Der Fehler, den Sie bekommen ist wegen Sie die Ansicht Gießen dass getView zurückkehrt (das ist der Ansicht, dass Sie aufgeblasene in Ihrem Fragment ; ein FrameLayout) zu einem CanvasView. Tun Sie das einfach:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.newsignature_layout, container, 
      false); 
    getDialog().setTitle("DialogFragment"); 

    Button clearCanvas = (Button)rootView.findViewById(R.id.newbutton1); 
    customCanvas = (CanvasView)rootView.findViewById(R.id.*your-canvas-id*); 

    clearCanvas.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       customCanvas.clearCanvas(); 
      } 
     }); 
    return rootView; 
} 
1

Nicht der sauberste Weg, Dinge zu tun, sondern versuchen:

View.OnClickListener myhandler1 = new View.OnClickListener() { 
    public void onClick(View v) { 
     ((CanvasView)v.findViewById(R.id.*your-canvas-view-id*)).clearCanvas(); 

    } 
};