2012-06-05 12 views
5

Ecco il metodo GetView della mia classe DownloadableProjectsFromWebAdapter:Android LayoutInflater Problema

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

Le linee che causano il problema:

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

Ecco le informazioni da 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) 

Qui la chiamata dell'adattatore:

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

E, infine, la definizione dei risultati:

List<AllProjectListInfo> results 

Ora, ho copiato il codice da un altro luogo che in cui io uso un adattatore personalizzato. Tuttavia, quello funziona bene. Non capisco perché questo non lo faccia.

Qualsiasi aiuto è apprezzato.

Grazie.

risposta

15

Invece di questo (che è per lo più sbagliato):

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

fare questo:

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

Perfetto, funziona come un proiettile d'argento. – Josh

0

si imposta il contesto sbagliato nel Adapter:

Prova questa:

DownloadableProjectsFromWebAdapter adapter = 
new DownloadableProjectsFromWebAdapter(
    MyActivityClass.this, 
    R.layout.all_projects_listview_item, 
    results); 
Problemi correlati