7

Tôi có hoạt động chính có 2 đoạn. Hoạt động chính có SearchView trong thanh tác vụ. Cả hai đoạn có một danh sách số lượng lớn các chuỗi, List<String>.Truyền dữ liệu tìm kiếm đến Hoạt động có thể tìm kiếm

Dòng chảy là:

tài vào Fragment I -> Chọn một chuỗi (cho phép nói Selection1) -> Dựa trên Selection1 một danh sách các chuỗi được phổ biến trong đoạn thứ hai - -> Ở đây người dùng chọn một chuỗi thứ hai ---> Xử lý dựa trên hai chuỗi này.

Bây giờ kể từ khi cả hai mảnh chứa một số lượng lớn các dây, người dùng nhập vào một truy vấn trong SearchView, để lọc danh sách và làm giảm nó vào một danh sách nhỏ hiển thị trong SearchableActivity.

Bây giờ vấn đề là làm cách nào để SearchableActivity truy cập vào hai số List<String> này để lọc chúng dựa trên truy vấn và hiển thị danh sách đã giảm cho người dùng.

Hiện nay những gì tôi đã làm là ghi đè onSearchRequested và vượt qua các dữ liệu như

@Override 
    public boolean onSearchRequested() 
    { 
     Bundle appData = new Bundle(); 
     appData.putString(FRAGMENT_ID, "Fragment_A"); 
     appData.putStringArrayList(SEARCH_LIST, searchList); 
     startSearch(null, false, appData, false); 
     return true; 
    } 

Có cách nào tốt hơn hoặc cách tiêu chuẩn mà vấn đề này có thể được xử lý tức là một thực hiện cho phép dữ liệu được dựa từ của tôi MainActivity đến SearchableActivity?

Chỉnh sửa: Thêm mã. Hiển thị cách dữ liệu được đặt trong Fragment. onDataReceived được gọi từ số HttpManager nhận dữ liệu.

@Override 
public void onDataReceived(String type,final Object object) 
{ 
    switch(type) 
    { 
     case PopItConstants.UPDATE_LIST: 
      getActivity().runOnUiThread(new Runnable() { 
       @Override 
       public void run() 
       { 
        updateCinemaList((List<String>) object); 
       } 
      }); 
      break; 
    } 
} 

public void updateDataList(List<String> data) 
{ 
    this.dataList = data; 
    spinner.setVisibility(View.GONE); 
    mAdapter.updateList(dataList); 
} 
+0

Có thể liên kết này có thể giúp bạn – prat

+0

Bạn có thể hiển thị mã của mình về cách bạn nhận và hiển thị dữ liệu và sau đó nhận dữ liệu người dùng đã chọn xin vui lòng? Sẽ dễ dàng hơn để trả lời cụ thể hơn là viết một câu trả lời tổng quát. –

+0

@Heyyou Dữ liệu về cơ bản là "Danh sách " được chứa trong ví dụ cho biết đoạn A. Nhưng SearchableActivity không có quyền truy cập vào danh sách này. Tôi không biết tôi cần dán mã gì để làm sáng tỏ thêm điều này. – unrealsoul007

Trả lời

1

Được rồi ... Vì vậy, đây là cách tôi đã làm.

Về cơ bản, dữ liệu nhận được trong hai đoạn không đơn giản là List<String> nhưng chúng là mô hình viz. Cinema và vùng lãnh thổ trong đó có các chi tiết khác so với tên bao gồm vị trí, rating, vv

Vì vậy, trước hết, tôi đã thực hiện một giao diện ISearchable

public Interface ISearchable 
{ 
    // This contains the Search Text. An ISearchable item is included 
    // in search results if query is contained in the String returned by this method 
    public String getSearchText(); 

    //This is meant to return the String that must be displayed if this item is in search results 
    public String getDisplayText(); 

    //This is meant to handle onClick of this searchableItem 
    public void handleOnClick(); 
} 

mô hình Cả Cinema và khu vực thực hiện ISearchable.

Sau này, tôi đã sử dụng một lớp singleton DataManager trong đó tôi duy trì một số List<ISearchable> currentSearchList.

public class DataManager 
{ 
    .....<singleton implementation>.... 
    List<ISearchable> currentSearchList; 

    public void setSearchList(List<ISearchable> searchList) 
    { 
     this.currentSearchList = searchList; 
    } 

    public List<ISearchable> getSearchList() 
    { 
     return this.currentSearchList; 
    } 

} 

Vì vậy, bất cứ khi nào một đoạn (hoặc Fragment_A hoặc Fragment_B) được nạp, nó cập nhật currentSearchList này, vì vậy mà khi SearchableActivity Thực hiện tìm kiếm tất cả nó phải làm là DataManager.getInstance().getSearchList() và sau đó sử dụng danh sách này để lọc ra một danh sách các các mục phù hợp.

Đây là cách tôi xử lý sự cố có Danh sách trong Hoạt động khác với SearchableActivity sử dụng tìm kiếm nào cần được thực hiện.

Tôi hiểu điều này có thể không phải là giải pháp tốt nhất, vì vậy, tôi mong được đề xuất và phê bình và sử dụng giải pháp đó để có giải pháp tốt hơn.

1

Tôi chỉ trả lời một câu hỏi tương tự một vài phút trước, tại how can I send a List into another activity in Android Studio

tôi khuyến khích bạn suy nghĩ lại mô hình của bạn chỉ đơn giản là thông qua dữ liệu xung quanh giữa các hoạt động và mảnh vỡ. Xem xét việc tạo một hoặc nhiều mô hình dữ liệu (các lớp không phải của Android) cho ứng dụng của bạn và làm cho các mô hình này có sẵn cho các lớp Android (Hoạt động, Phân đoạn, v.v.) cần chúng.

Xóa tất cả mã lưu trữ và thao tác dữ liệu khỏi Hoạt động và Phân đoạn của bạn và đặt nó vào (các) mô hình.

+0

Tất cả mã lưu trữ dữ liệu của tôi nằm trong Mô hình Dữ liệu và không có trong Hoạt động hoặc Phân đoạn. Tôi vừa đề cập đến 'Danh sách ' trong Phân đoạn để dễ hiểu. Cảm ơn câu trả lời của bạn nhưng tôi đã sử dụng mẫu Singleton và đang tìm kiếm thứ gì đó tốt hơn. – unrealsoul007

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