2012-09-22 20 views
20

Fragmentを拡張するクラスでsetAdapter()メソッドを呼び出しています。私はandroid.support.v4.app.Fragmentを輸入していることに注意してください。setAdapter "呼び出しにはAPIレベル11が必要です(現在の最小値は8です):android.widget.AbsListView#setAdapter"?

私は、APIレベルがレベルにあることが必要であるというエラーを取得するしかし、私は私がminSdkVersion="8"

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 
     } 
    } 
} 

minSdkVersion="11"への注意を変更せずにこの問題を解決することができるようにしなければならない何11

:targetSdkVersionを10に減らそうとしましたが、エラーが表示されます。助けてください!

編集:私が使用したすべてがListViewである場合、それがAbsListVewと呼ばれる理由はわかりません。また、私はカスタムアダプタを使用したことに注意してください。

EventListAdapterArrayAdaptere<ListContent>であり、エラーなしを示します。あなたはAbsListView上のドキュメントにsetAdapter()方法を見ることができるようにここにあなたの参考のために

は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

は必ずサポートを拡張していてください千鳥フラグメント...ちょうどインポートを削除し、それを変更します –

答えて

71

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

「ファイル名を指定して実行Androidのリントは、」いくつかのマーカーとマーカーは、このエラーの原因となります。

+6

[Preferences]> [Android]> [Lint Error Checking]で、[ファイルを保存するときにエラーをチェックする]チェックボックスをオフにしてください。 – Felix

0

のXMLレイアウトコードスニペットであるAPIレベル11からわずか入手可能ですので、「そこにISNできるだけ多くの場合、最終的にAbsListViewListViewまたはGridViewにキャストしてから、setAdapter()に電話してください。

+0

私は自分のコードで 'ListView'を使用しました。ちょうど私は私の 'アダプタ'をカスタマイズしました。エラーはどこにありますか? – Enigman

+0

投稿コード: –

+0

@Ovidu:コードを投稿しました。今すぐ確認して教えていただけますか?ありがとう:) – Enigman

7

解決策は、後でAndroidバージョンで同じ名前のメソッド呼び出しが導入されたため、サブタイプを修正するためのキャストタイプです。

@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

クラッシュはありません。あなたのコメントは他には役に立たないと説明しています。あなたはpre API 11 AdapterViewにキャストしようとしていますので、新しいAPIで何もしていないので、ちょうどコンパイラに正しいメソッドをpre API 11 ... – Renetik

+1

に残して申し訳ありません、私はあなたのソリューションをテストし、私は "抽象メソッドが実装されていないエラー"を持っていた。私はしかし、私の問題の回避策を見つけました。後見では解決策があるかもしれませんが、私の実装ではうまく実行されませんでした。私はそれが関連していなかったので後で私の応答を削除します –

0

私はこのように私のsetAdapter方法をキャストして、「エラーが実装されていません抽象メソッド」解く:

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

これは、Etsyのに関連しているが、GridViewの

関連する問題