我正在研究允許用戶簽名的應用程序。從對話框片段中查看調用方法
我有一個主要活動,當我點擊我的主要活動按鈕時,它加載了一個畫布視圖。在這個畫布上有各種方法,我可以使用像「清除畫布」清除畫布後,我畫了它。
但是,我最近把調用Canvas視圖的佈局放到對話框中。
從那以後,我無法在視圖中訪問我的方法。
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