14

Tôi không thể hiểu tại sao findViewById trả về phần tử sai, đây là lớp:findViewById truy xuất phần tử sai?

public class EventDetailsFragment extends FragmentActivity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState);   
     setContentView(R.layout.event_details); 
     Log.d("First", findViewById(R.id.tuxtView1).getClass().toString()); 
     Log.d("Second", findViewById(R.id.tuxtView2).getClass().toString()); 
     Log.d("Third", findViewById(R.id.imageView1).getClass().toString()); 
    } 
} 

Và đây là xml:

<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@color/green" 
android:orientation="horizontal" 
android:paddingLeft="10dp" 
android:paddingRight="10dp" 
android:paddingTop="10dp"> 

    <RelativeLayout 
    android:id="@+id/relativeLayout1" 
    android:layout_width="0dp" 
    android:layout_height="175dp" 
    android:layout_gravity="center_horizontal" 
    android:layout_weight="1" 
    android:background="#fff" 
    android:gravity="right" > 

     <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="110dp" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:src="@drawable/ic_event_image" /> 

     <TextView 
     android:id="@+id/tuxtView2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentTop="true" 
     android:layout_marginTop="10dp" />  
     <TextView 
     android:id="@+id/tuxtView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/tuxtView2" 
     android:layout_toRightOf="@+id/imageView1" 
     android:textColor="#555" 
     android:textSize="20dp" /> 

    </RelativeLayout> 

</LinearLayout> 

Các ouput logcat là:

12-26 23:43:20.249: D/First(6789): class android.widget.TextView 
12-26 23:43:20.249: D/Second(6789): class android.widget.ImageView 
12-26 23:43:20.249: D/Third(6789): class android.widget.TextView 

Vì vậy, vấn đề là, tại sao tôi nhận được một lần xem hình ảnh với id R.id.tuxtView2 và một lần xem văn bản với id R.id.imageView1. Ứng dụng bị treo nếu tôi muốn gán giá trị văn bản cho R.id.tuxtView2, được đúc dưới dạng TextView.

+2

Hãy thử tải lại dự án của bạn, có thể đã xảy ra sự cố với R.java hoặc xác minh bạn đang gọi tệp tốt với setContentView. –

+0

Câu hỏi được ghi lại đầy đủ. Xin lỗi, không biết tại sao điều này lại xảy ra. –

+0

@ JeremyD, wow, tôi đã thử tất cả mọi thứ, trong một vài giờ, ngoại trừ khởi động lại nhật thực. Tôi khởi động lại nhật thực và nó đột nhiên làm việc trở lại. Tôi nghĩ rằng tôi đã làm điều gì đó sai trong mã của tôi. Đăng câu trả lời đó và tôi sẽ bình chọn cho bạn + đánh dấu nó là đã được giải quyết. Cảm ơn! – jonepatr

Trả lời

21

Cố gắng tải lại dự án của bạn, có lẽ cái gì sai với R.java, hoặc xác minh bạn đang gọi tập tin tốt với setContentView là.

Bằng cách làm mới/làm sạch dự án của bạn, tệp R.java sẽ được tải lại và sẽ tìm thấy các tiện ích có tên.

+2

Tôi sẽ chỉ trả lời câu trả lời này vì bạn đã chính xác, nhưng tôi sẽ thêm cho tôi xóa nội dung của thư mục/gen của tôi là cách duy nhất để giải quyết một vấn đề rất giống nhau. – jiggy

+2

Cảm ơn bạn! Nó rất đáng sợ khi mã của Google tuyên bố rằng "1 == 2";) – Adam

+1

NB: không làm những gì tôi đã làm và xóa thư mục/gen của bạn - hãy cẩn thận để chỉ xóa các NỘI DUNG của nó. Nếu bạn xóa toàn bộ, nó tạm thời phá vỡ ADT (nhưng bạn nhận được một lỗi cho bạn biết làm thế nào để sửa chữa nó, đó là tốt), nhưng vĩnh viễn phá vỡ SVN (nếu bạn đang sử dụng SVN). Ugh. Chỉ có giải pháp là "hoàn nguyên" thư mục trong SVN. – Adam

2

Tôi đã sao chép mã của bạn và tạo một ứng dụng giả. Tôi nhận được những kết quả này:

12-27 00:03:48.332: D/First(9165): class android.widget.TextView 
12-27 00:03:48.332: D/Second(9165): class android.widget.TextView 
12-27 00:03:48.332: D/Third(9165): class android.widget.ImageView 

Rõ ràng không có gì sai với mã

+0

Cảm ơn, tôi đã thử mọi thứ ngoại trừ khởi động lại nhật thực, điều này hóa ra lại là nguồn gốc của vấn đề. Cảm ơn bạn đã dành thời gian:) – jonepatr

+0

Không sao cả. Lần tới bạn có thể thử nhấp chuột phải vào dự án của mình và chọn Công cụ Android-> Sửa thuộc tính dự án HOẶC đi dưới thanh dự án Eclipse-> Dự án sạch – RonzyFonzy

0

Tôi đã thử gần như mọi thứ ở đây, nhưng không có gì hiệu quả cho đến khi tôi thêm thành phần mới vào hoạt động và sau khi chạy, nhận thấy thành phần mới không hiển thị. Nó cho thấy ứng dụng của tôi không cập nhật với các lần chạy. Nó hoạt động bằng cách gỡ cài đặt phiên bản cũ của ứng dụng theo cách thủ công rồi chạy lại.

Các vấn đề liên quan