6

listfragments 및 사용자 정의 어댑터를 사용하는 방법을 이해하려고합니다. 그래서이 작은 예제를 만들고 나는 listview의 디바이더를 어디에 놓을 수 있는지 궁금합니다. 나는 또한 무언가를 보았다ListFragment 사용자 정의 레이아웃의 Divider (null)로 설정하는 방법

"컬러/투명 @ 안드로이드" 는하지만 목록보기를 가진 XML 레이아웃을 해달라고 분할 = - 안드로이드 dividerHeight = "1dip" : - 안드로이드 :

나는 다른 방법을 발견 listview.setDivider (null)과 같지만, listfragments를 사용하기 때문에 코드에서 그 메소드를 사용할 수있는 곳을 모른다.

내 코드 :

listview_item_row.xml 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal" > 

    <ImageView 
     android:id="@+id/ivCountry" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/ic_launcher" 
     android:layout_weight="1"/> 

    <TextView 
     android:id="@+id/tvCountry" 
     android:layout_width="wrap_content" 
     android:layout_height="fill_parent" 
     android:gravity="center_vertical" 
     android:text="TextView" 
     android:layout_weight="4" /> 

</LinearLayout> 

CountryList 클래스

public class CountryList extends ListFragment { 

    Country[] countries2 = new Country[] 
      { 
       new Country("Netherlands"), 
       new Country(R.drawable.bas,"Basque Country") 
      }; 


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

     CountryAdapter adapter = new CountryAdapter(inflater.getContext(),R.layout.listview_item_row,countries2); 
     setListAdapter(adapter); 
     getListView().setDivider(null); 

     return super.onCreateView(inflater, container, savedInstanceState); 
    } 

당신은 항상 onCreateView에서보기를 반환하여 ListFragment에 대한 사용자 정의보기를 설정할 수 있습니다

public class CountryAdapter extends ArrayAdapter<Country>{ 

Context context; 
int layoutResourceId; 
Country[] data = null; 

public CountryAdapter(Context context, int layoutResourceId, Country[] data) { 
    super(context,layoutResourceId,data); 
    this.context = context; 
    this.layoutResourceId = layoutResourceId; 
    this.data = data; 

} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    // TODO Auto-generated method stub 
    View row = convertView; 
    CountryHolder holder = null; 

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

     holder = new CountryHolder(); 
     holder.imgIcon = (ImageView) row.findViewById(R.id.ivCountry); 
     holder.txtTitle = (TextView)row.findViewById(R.id.tvCountry); 

     row.setTag(holder); 

    } else { 
     holder = (CountryHolder) row.getTag(); 
    } 

    Country country = data[position]; 
    holder.txtTitle.setText(country.getTitle()); 
    holder.imgIcon.setImageResource(country.getIcon()); 

    return row; 

} 

static class CountryHolder 
{ 
    ImageView imgIcon; 
    TextView txtTitle; 
} 

답변

18

내 CountryAdapter() 하지만에서 설명한 것처럼 "@ id/android : list"가 포함 된 ListView가 있어야합니다..

xml에서 android:divider="@null"을 수행하거나 ListFragment 코드 getListView().setDivider(null); (onActivityCreated() 메소드에서)에서 실제로 수행하려는 경우에 사용할 수 있습니다.

+0

는 내가 위에서 getListView()를 추가하는 시도 setDivider (널) (내 코드 "아직 만들지 않은 내용보기"참조) 그러나 그것은 나에게 오류를 제공합니다.. 나는 조금 혼란 스럽다. 내가 listview와 XML 레이아웃을 가리 키도록해야 이해하지만, 내가 어디에서 그렇게합니까? 그리고 만약 내가 listview와 XML 레이아웃을 만들면, 내 listview_item_row.xml을 어디에 넣어야합니까? – Lokkio

+3

'onCreateView'에서'getListView(). setDivider (null);'을 호출하는 대신'onActivityCreated'에서 호출하면 문제를 해결할 수 있습니다. 필자는'ListFragment' 안에서'onCreateView' 함수를 절대 만지지 말아야한다고 강조합니다. – MCeley

+0

예 마지막으로 일한 사람 : D thanks! – Lokkio

3

내부 onCreateView 사용 :

getListView().setDivider(null);

+0

괄호를 잊어 버렸습니까? – Lokkio

+0

괄호는 무엇입니까? – Rawkode

+0

getListView()? – Lokkio

관련 문제