Cách lấy Tên tài nguyên từ Tài nguyên id


158


Trong bố trí của tôi, tôi đã định nghĩa một cái gì đó như thế này.

<RadioButton
    android:id="@+id/radio1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Dnt want this text" />

Giả sử rằng một số chức năng trong hoạt động trả về cho tôi id này (id của radioButton). Bây giờ tôi muốn lấy văn bản radio1 từ id này. Tóm lại tôi muốn lấy văn bản radio1 viết bằngandroid:id="@+id/radio1"

Ai đó có thể cho tôi biết làm thế nào là nó có thể?


Đó là một câu chuyện dài .. tôi cần phải nhập dữ liệu vào một số lượng lớn không có chỉnh sửa từ một số dữ liệu nhận được từ máy chủ. Vì vậy, thay vì tự cài đặt dữ liệu cho tất cả các hộp văn bản, tôi đang viết một phương thức có thể làm việc này cho tôi .. vì tôi cần điều này.
Code_Life

Câu trả lời:


363

Trong Hoạt động của bạn, hãy thử những điều sau:

  1. để có được chuỗi như radio1:

    getResources().getResourceEntryName(int resid);
  2. để có được chuỗi như com.sample.app:id/radio1:

    getResources().getResourceName(int resid);

Trong Kotlin bây giờ:

val name = v.context.resources.getResourceEntryName(v.id)

4
Cảm ơn bạn đã trả lời điều này, tôi đã dành phần tốt hơn trong một giờ để giải quyết vấn đề này - trang web dev liên tục chỉ cho tôi getString () - điều này vô dụng với việc này.
Steve

8
Bất kỳ ý tưởng về sự khác biệt giữa getResourceEntryName(int resid)getResourceName(int resid)?
Joshua Pinter

10
@JoshPinter tham chiếu cho biết: getResourceEntryName: Trả lại tên mục nhập cho một định danh tài nguyên nhất định getResourceName: Trả lại tên đầy đủ cho một định danh tài nguyên nhất định. Tên này là một chuỗi duy nhất của mẫu "gói: loại / mục" Sự khác biệt sau đó dường như nằm trong gói được thêm vào : gõ cho getResourceName
Jose_GD

@Shubhayu - làm thế nào bạn có thể làm điều này trong một thử nghiệm espresso? Hàm getResource () dường như không khả dụng!
1ak31sha

Tôi không khuyên bạn nên sử dụng nó nếu bạn sử dụng Proguard ( minifyEnabled true), đặc biệt là chogetResources().getIdentifier(...
user25

9

Bạn có id (loại 'dài') từ id mà bạn muốn truy cập id (tên) của nút radio đó là radio1 . Bạn sử dụng cái này

getResources().getResourceEntryName(id);

khi sử dụng ở trên, bạn có thể nhận được tên của nút radio tức là radio1. ở đây tham số id là cái mà bạn có (loại dài) . Hãy thử điều này nó sẽ giúp bạn 100%.


2
Cảm ơn bạn. Vui mừng khi ai đó thực sự trả lời câu hỏi thay vì câu trả lời "tại sao bạn cần câu trả lời [noob]" thông thường đó. Có tên của phần tử trong khi tôi lặp qua chúng là KHÔNG THỂ BẮT ĐẦU để gỡ lỗi. Ý tôi là, thực sự, làm thế nào để tôi tìm TextView với id 354814715? .
Steve


1

Nếu tôi đúng, cái bạn muốn lấy là từ "radio1" (từ chính id?) Vì vậy nếu đó là trường hợp thì trước tiên bạn cần lấy id của nó.

int intname= buttonname.getId();

sau đó nhận được kết quả của nó

String stringname= getResources().getResourceEntryName(intname);

hy vọng tôi đã giúp


-1

Bạn có nghĩa là bạn muốn lấy văn bản chuỗi của id?

Vì bạn đã định nghĩa nó nên bạn biết đây là gì.

Nếu bạn có bố cục và bạn muốn tìm xem Chế độ xem có id cụ thể không, bạn có thể duyệt toàn bộ bố cục và kiểm tra bằng getId (), nếu id của mỗi Chế độ xem là id bạn đang tìm ..

Hy vọng điều này sẽ giúp (nếu tôi hiểu chính xác câu hỏi của bạn .. :))


Không, bạn đã hiểu sai tất cả. Tôi muốn truy xuất văn bản radio1 từ android: id = "@ + id / radio1"
Code_Life

Văn bản radio1 LÀ id của Chế độ xem của bạn. Nó không phải là một văn bản đơn giản mà bạn có thể nhận được, phân tách, vv .. Để giúp bạn tốt hơn, bạn có thể cho chúng tôi biết chính xác bạn cần văn bản này để làm gì không?
Dimitris Makris

@DimitrisMakris: Đó là một câu chuyện dài .. tôi cần phải nhập dữ liệu vào một số lượng lớn không có chỉnh sửa từ một số dữ liệu nhận được từ máy chủ. Vì vậy, thay vì cài đặt thủ công dữ liệu cho tất cả các hộp văn bản, tôi đang viết một phương thức có thể phù hợp với tôi .. vì tôi cần điều này
Code_Life

Vì vậy, nếu bạn có câu trả lời là 10 chuỗi ví dụ mà bạn muốn đưa vào 10 radiobutton, tôi nghĩ rằng một giải pháp có thể là tự động tạo ra các radiobutton này và đặt giá trị của chúng. Một cách tiếp cận khác có thể là sử dụng ListView với radiobutton làm mục danh sách, nếu điều này phù hợp với nhu cầu của bạn về bố cục.
Dimitris Makris

Cảm ơn sự tôn trọng của bạn. Nhưng bạn đã hiểu sai tất cả, tôi có 10 editBox và tôi nhận được dưới dạng chuỗi json với giá trị được điền vào 10 hộp chỉnh sửa này sau khi chuỗi này được phân tích cú pháp, nó được chuyển đổi thành HashMap. Bây giờ thay vì ánh xạ thủ công từng giá trị (tương ứng với khóa của hàm băm) để chỉnh sửa văn bản .. tôi đang viết một phương thức có thể làm việc này cho tôi.
Code_Life
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.