2013-04-18 5 views
0

Я использую Actionbars для SherlockFragment в своем приложении, и внутри одного из действий я создал собственный ListView. Кажется, что он не работает из-за контекста, и я не уверен, как обойти его.Пользовательский ListView + Шерлок-Фрагмент не сотрудничает

Вот мой код из пользовательского элемента управления ListView:

package net.agnesium.lommebudsjett.view; 

import java.util.List; 

import com.actionbarsherlock.app.SherlockFragment; 

import net.agnesium.lommebudsjett.R; 
import net.agnesium.lommebudsjett.view.InnkjopActivity.ListViewItem; 
import android.app.Activity; 
import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.TextView; 

public class ListeKontroll extends BaseAdapter 
{ 

    LayoutInflater inflater; 
    List<ListViewItem> items; 

    public ListeKontroll(Context context, List<ListViewItem> items) { 
     super(); 

     this.items = items; 
     this.inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 



    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return items.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 

     ListViewItem item = items.get(position); 

     View vi=convertView; 

     if(convertView==null) 
      vi = inflater.inflate(R.layout.liste_rad, null); 

     TextView imgThumbnail = (TextView) vi.findViewById(R.id.imgThumbnail); 
     TextView txtTitle = (TextView) vi.findViewById(R.id.txtTitle); 
     TextView txtSubTitle = (TextView) vi.findViewById(R.id.txtSubTitle); 

     imgThumbnail.setText(item.navn); 
     txtTitle.setText(item.pris); 
     txtSubTitle.setText(item.kategori); 

     return vi; 
    } 
} 

А класс, где ListView высовывается:

package net.agnesium.lommebudsjett.view; 

import java.util.ArrayList; 
import java.util.List; 
import net.agnesium.lommebudsjett.R; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ListView; 

import com.actionbarsherlock.app.SherlockFragment; 

public class InnkjopActivity extends SherlockFragment{ 

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 
    View V = inflater.inflate(R.layout.activity_innkjop, container, false); 

    super.onCreate(savedInstanceState); 
    ListView kvittering = (ListView) V.findViewById(R.id.lstKvitt); 
    List<ListViewItem> items = new ArrayList<ListViewItem>(); 
    items.add(new ListViewItem() 
    {{ 
     navn = "Produkt"; 
     pris = 100; 
     kategori = "Kategori"; 

    }}); 

    ListeKontroll adapter = new ListeKontroll(this.getSherlockActivity(), items); 
    kvittering.setAdapter(adapter); 



    return V; 


} 
class ListViewItem{ 

    public int pris; 
    public String navn; 
    public String kategori; 
} 

}

+0

Что ошибка вы получаете ? –

+0

Если я использую «ListeKontroll adapter = новый ListeKontroll (this.getSherlockActivity(), items)», приложение просто падает. И если я просто использую «новый ListeKontroll (это, элементы)», я получаю «Конструктор ListeKontroll (InnkjopActivity, List ) не определен». –

+0

попробуйте сделать новый ListeKontrol (getActivity(), items) ' –

ответ

0
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 

    return inflater.inflate(R.layout.activity_innkjop, container, false); 
} 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 

    ListView kvittering = (ListView) getView().findViewById(R.id.lstKvitt); 
    List<ListViewItem> items = new ArrayList<ListViewItem>(); 
    items.add(new ListViewItem() 
    {{ 
     navn = "Produkt"; 
     pris = 100; 
     kategori = "Kategori"; 

    }}); 

    ListeKontroll adapter = new ListeKontroll(getActivity(), items); 
    kvittering.setAdapter(adapter); 

    super.onActivityCreated(savedInstanceState); 
} 
Смежные вопросы