2012-06-05 11 views
5

ここに私のクラスDownloadableProjectsFromWebAdapterのGetViewメソッドです:アンドロイドLayoutInflater問題

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View row = convertView; 
    DownloadableProjectsFromWebHolder holder = null; 

    if(row == null) 
    { 
     LayoutInflater inflater = ((Activity)context).getLayoutInflater(); 
     row = inflater.inflate(layoutResourceId, parent, false); 

     holder = new DownloadableProjectsFromWebHolder(); 
     holder.txtPid = (TextView)row.findViewById(R.id.tvAllProjectsPid); 
     holder.txtName = (TextView)row.findViewById(R.id.tvAllProjectsName); 
     holder.txtShareable = (TextView)row.findViewById(R.id.tvAllProjectsShareable); 

     row.setTag(holder); 
    } 
    else 
    { 
     holder = (DownloadableProjectsFromWebHolder)row.getTag(); 
    } 

    String share_text; 
    AllProjectListInfo li = data.get(position); 
    holder.txtPid.setText("ID: " + Integer.toString(li.getId())); 
    holder.txtName.setText(li.getName()); 
    if (li.getShareable()){ 
     share_text = "Public Project"; 
    } else { 
     share_text = "Private Project"; 
    } 
    holder.txtShareable.setText(share_text); 

    return row; 
} 

問題を引き起こしている行:

35: LayoutInflater inflater = ((Activity)context).getLayoutInflater(); 
36: row = inflater.inflate(layoutResourceId, parent, false); 

ここでは、LogCatからの情報:

FATAL EXCEPTION: main 
java.lang.ClassCastException: android.app.ContextImpl cannot be cast to android.app.Activity 
    at com.ericbrian.tnc.ConProForAndroid.DownloadableProjectsFromWebAdapter.getView(DownloadableProjectsFromWebAdapter.java:36) 
    at android.widget.AbsListView.obtainView(AbsListView.java:2033) 
    at android.widget.ListView.makeAndAddView(ListView.java:1772) 
    at android.widget.ListView.fillDown(ListView.java:672) 
    at android.widget.ListView.fillFromTop(ListView.java:732) 
    at android.widget.ListView.layoutChildren(ListView.java:1625) 
    at android.widget.AbsListView.onLayout(AbsListView.java:1863) 
    at android.view.View.layout(View.java:11278) 
    at android.view.ViewGroup.layout(ViewGroup.java:4224) 
    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1628) 
    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1486) 
    at android.widget.LinearLayout.onLayout(LinearLayout.java:1399) 
    at android.view.View.layout(View.java:11278) 
    at android.view.ViewGroup.layout(ViewGroup.java:4224) 
    at android.widget.FrameLayout.onLayout(FrameLayout.java:431) 
    at android.view.View.layout(View.java:11278) 
    at android.view.ViewGroup.layout(ViewGroup.java:4224) 
    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1628) 
    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1486) 
    at android.widget.LinearLayout.onLayout(LinearLayout.java:1399) 
    at android.view.View.layout(View.java:11278) 
    at android.view.ViewGroup.layout(ViewGroup.java:4224) 
    at android.widget.FrameLayout.onLayout(FrameLayout.java:431) 
    at android.view.View.layout(View.java:11278) 
    at android.view.ViewGroup.layout(ViewGroup.java:4224) 
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1489) 
    at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2442) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:137) 
    at android.app.ActivityThread.main(ActivityThread.java:4424) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:511) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
    at dalvik.system.NativeStart.main(Native Method) 

ここでアダプタを呼び出す:

DownloadableProjectsFromWebAdapter adapter = 
    new DownloadableProjectsFromWebAdapter(
     getBaseContext(), 
     R.layout.all_projects_listview_item, 
     results); 

そして最後に、結果は定義:今すぐ

List<AllProjectListInfo> results 

、私は、カスタムアダプタを使用することを別の場所からこのコードをコピーしました。しかし、それはうまく動作します。なぜこの1つではないのか分かりません。

何か助けていただければ幸いです。

ありがとうございました。

答えて

15

の代わりにこの(ほとんどが間違っている)

LayoutInflater inflater = ((Activity)context).getLayoutInflater(); 

次の操作を行います。

LayoutInflater inflater = LayoutInflater.from(context); 
+0

完璧な、それは銀の弾丸のように動作します。 – Josh

0

あなたはアダプタで間違ったコンテキストを設定している:

はこれを試してみてください:

DownloadableProjectsFromWebAdapter adapter = 
new DownloadableProjectsFromWebAdapter(
    MyActivityClass.this, 
    R.layout.all_projects_listview_item, 
    results); 
関連する問題