2012-09-22 36 views
20

Tôi đang gọi phương thức setAdapter() trong một lớp mở rộng Fragment. Lưu ý rằng tôi đã nhập android.support.v4.app.Fragment.setAdapter "Cuộc gọi yêu cầu cấp API 11 (min hiện tại là 8): android.widget.AbsListView # setAdapter"?

Tuy nhiên tôi nhận được một lỗi nói rằng mức API được yêu cầu để được cấp 11.

gì tôi phải làm như vậy mà tôi có thể sửa lỗi này mà không thay đổi minSdkVersion="8" để minSdkVersion="11"

package foo.bar.qux; 

import java.util.Calendar; 
import java.util.Date; 

import org.w3c.dom.Document; 
import org.w3c.dom.NodeList; 

import android.support.v4.app.Fragment; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.LinearLayout; 
import android.widget.ListView; 
import android.widget.TextView; 

public class TabFragmentList extends Fragment { 

    String category, xml; 
    NodeList nodes; 
    int numResults; 
    private ListView lv; 
    Date date; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     if (container == null) return null; 
     return (LinearLayout) inflater.inflate(R.layout.eventlist, container, 
       false); 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     Activity activity = getActivity(); 
     if (activity != null) { 
      final Calendar c = Calendar.getInstance(); 
      ListContent[] item = new ListContent[3]; 
      category = (String) activity.getIntent().getExtras() 
        .get("category"); 
      xml = (String) activity.getIntent().getExtras().get("xml"); 
      TextView tv = (TextView) getView().findViewById(R.id.category); 
      tv.setText(category); 
      nodes = doc.getElementsByTagName("event"); 
      for (int i = 0; i < 3; i++) { 
       c.add(Calendar.DATE, 1); 
       date = c.getTime(); 
       item[i] = new ListContent(); 
       item[i].setList(nodes, category, date); 
      } 
      EventListAdapter adapter = new EventListAdapter(activity, 
        R.layout.eventlist_row, item); 
      lv = (ListView) getView().findViewById(R.id.listView1); 
      lv.setAdapter(adapter); // ERROR SHOWN HERE 
     } 
    } 
} 

Note : Tôi đã thử giảm targetSdkVersion xuống 10. Tuy nhiên, tôi nhận được lỗi. Hãy giúp tôi!

Chỉnh sửa: Tôi không hiểu tại sao nó được gọi là AbsListVew khi tất cả những gì tôi đã sử dụng là ListView. Ngoài ra, lưu ý rằng tôi đã sử dụng một bộ điều hợp tùy chỉnh.

EventListAdapter kéo dài ArrayAdaptere<ListContent> và hiển thị KHÔNG L ERI.

Đối với các bạn tham khảo ở đây là xml bố trí đoạn mã cho R.id.ListView1

<ListView 
     android:layout_margin="10dp" 
     android:dividerHeight="10.0sp" 
     android:id="@+id/listView1" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" /> 
+0

Hãy ủng hộ chắc chắn rằng bạn đang mở rộng đoạn ... chỉ cần loại bỏ việc nhập và thay đổi nó –

Trả lời

71

Right click on the project folder > Android tools > Clear Link Markers

"Run Android Lint" làm cho một số dấu hiệu và cán bộ chấm gây ra lỗi này.

+6

Và tôi phải bỏ chọn "Khi lưu tệp, kiểm tra lỗi" trong Tùy chọn> Android> Kiểm tra lỗi Lint. – Felix

0

Như bạn có thể thấy trong các tài liệu setAdapter() phương pháp trên AbsListView có sẵn chỉ từ API Cấp 11. Vì vậy, có isn' bạn có thể thực hiện nhiều việc, bạn chỉ có thể truyền cuối cùng số AbsListView của mình đến ListView hoặc GridView và sau đó gọi setAdapter().

+0

Tôi đã sử dụng chỉ một 'ListView' trong mã của tôi. Chỉ cần tôi tùy chỉnh 'Adapter' của tôi. Vậy thì lỗi ở đâu? – Enigman

+0

đăng một số mã sau đó –

+0

@Ovidu: Tôi đã đăng mã. Bạn có thể vui lòng kiểm tra và cho tôi biết bây giờ không? Cảm ơn :) – Enigman

7

Giải pháp chỉ là loại truyền để sửa loại phụ như sau này các phiên bản Android giới thiệu cuộc gọi phương thức có cùng tên.

@SuppressWarnings({ "unchecked", "rawtypes" }) 

EventListAdapter adapter = new EventListAdapter(activity, R.layout.eventlist_row, item); 
lv = (ListView) getView().findViewById(R.id.listView1); 
((AdapterView)lv).setAdapter(adapter); //ERROR SOLVED HERE 
+0

Tôi không thấy một sự cố, giải thích, bình luận của bạn không hữu ích nếu không ... Bạn đang đúc trước API 11 AdapterView vì vậy những gì bạn làm ở đây không có bất cứ điều gì với API mới hơn, bạn chỉ đang nói trình biên dịch để sử dụng đúng phương pháp tồn tại trong API trước 11 ... – Renetik

+1

xin lỗi, tôi đã thử nghiệm giải pháp của bạn và tôi đã có lỗi "phương pháp trừu tượng không được triển khai". Tuy nhiên tôi đã tìm thấy một giải pháp cho vấn đề của tôi. trong hindsight các giải pháp có thể có công việc, nó đã được thực hiện của tôi mà không được thực hiện tốt. Tôi sẽ xóa câu trả lời của tôi sau vì nó không liên quan –

0

tôi đã giải quyết được "phương pháp trừu tượng không thực hiện báo lỗi" bằng cách đúc phương pháp setAdapter của tôi như thế này:

@SuppressWarnings("unchecked") 
public void setAdapterSDK8(Adapter adapter) { 
    ((AdapterView) this).setAdapter(adapter); 
    ((StaggeredGridView) this).setAdapter((ListAdapter) adapter); 
} 

này có liên quan đến Etsy loạng choạng GridView

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