Câu hỏi liên quan

0 Phiếu
3 Câu trả lời
0 Phiếu
0 Câu trả lời
0 Phiếu
4 Câu trả lời
0 Phiếu
0 Câu trả lời

Android ClassCastException khi truy xuất Custom View


0 Phiếu
Đã hỏi 08/4/2016 bởi Ba4600Landy (520 điểm)
I've just run into an issue when attempting to grab a custom View using findViewById(). The custom view otherwise displays and operates correctly. Unfortunately, I need to be able to change some data it displays at will, so it has to be done. My XML looks like this:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="match_parent"
  android:layout_height="match_parent">
  <com.TheProject.TheApp.Chart 
    android:id="@+id/chart"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
  />
</LinearLayout>
I know sometimes the issue is that people accidentally name the component "View" in the XML instead of their subclass of it. Inside my Activity's onCreate() method, I have this:
myChart=(Chart)findViewById(R.id.chart); //where myChart is an object of type Chart
That throws a ClassCastException. I decided to experiment a little and instead changed the line to this to see if I still recieved a ClassCastException:
View chart=(View)findViewById(R.id.chart);
This worked fine, which tells me that findViewById has no trouble giving me a View. But it doesn't want to give me a Chart. As far as the Chart class goes, it's a really simple subclass of View that appears to otherwise work correctly.
public class Chart extends View{
    public Chart(Context context) {
    super(context);     
    init();
}
public Chart(Context context, AttributeSet attrs) {
    super(context, attrs);      
    init();
}
public Chart(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);        
    init();     
}
    /* More stuff below like onDraw, onMeasure, setData, etc. */
}
I'm probably just doing something stupid. Do you guys have any ideas? Thanks for your help!

2 Câu trả lời

–1 Phiếu
Đã trả lời 21/4/2016 bởi hiermy (250 điểm)
findViewById sẽ luôn quay trở lại xem đối tượng. Bạn chỉ có thể đến access phương pháp được quy định trong class xem và không ai trong số những phương pháp cho class bảng xếp hạng của bạn sẽ là accessbile. Nếu bạn cần phải access bất kỳ biểu đồ phương pháp cụ thể hoặc data , bạn sẽ cần phải cast object xem biểu đồ.
Đã bình luận 22/4/2016 bởi N_cius (360 điểm)
Bảng xếp hạng không có nhà thầu?
0 Phiếu
Đã trả lời 21/4/2016 bởi yorkselvey (860 điểm)
Chỉ cần ra khỏi tò mò, xml mà đang được sử dụng trong các bố trí khác với một thẻ <include>? Tôi đã có một vấn đề như thế này mà chúng tôi đã bao gồm một xml bố trí trong một viewflipper với <include layout="@layout/some_layout.xml">findviewbyid đã nhận được các vật dụng sai. Tôi đã có để bọc giao diện bên ngoài hoàn toàn trong thẻ <merge></merge> để cho phép nó để nhập một cách chính xác vào cách bố trí căn cứ. Hãy thử thay đổi bố trí của bạn với điều này, nếu nó được bao gồm.
<?xml version="1.0" encoding="utf-8"?>
<merge>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="match_parent"
  android:layout_height="match_parent">
  <com.TheProject.TheApp.Chart 
    android:id="@+id/chart"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
  />
</LinearLayout>
</merge>
edit: hãy kiểm tra này liên kết về cách kết hợp hoạt động
Đã bình luận 22/4/2016 bởi fhpaVien (1,190 điểm)
Có. Biểu đồ này có tất cả nhà thầu 3. Tôi đã chỉnh sửa bài viết của tôi để cho họ.

ToughDev Q&A là gì?

Trang web hỏi đáp cho các bạn đam mê lập trình, phát triển phần mềm và các vấn đề kỹ thuật khác. Với sự giúp đỡ của bạn, chúng tôi hy vọng sẽ xây dựng thành công một thư viện đầy đủ các câu hỏi và trả lời về tất cả các vấn đề có liên quan đến lập trình!







...