15

저는 Android 개발에 새로 왔습니다. 나는 (조각을 통해 추가되는) 태그를 사용하여 응용 프로그램을 빌드하려고합니다. 파편 중 하나에서 목록을 표시하려고합니다. 이 목록은 ArrayAdapter에서 확장 한 ListAdapter를 사용하여 채워졌으며 getView() 메소드를 오버로드했습니다. 이 내 조각ArrayAdapter의 getView() 메소드가 호출되지 않습니다.

public class tabcontentActivity extends Fragment { 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
     if (container == null) { 
      return null; 
     } 
     View v = (LinearLayout) inflater.inflate(R.layout.tablayout, container, 
      false); 
     ListView lv = (ListView) v.findViewById(R.id.listview1); 
     ListViewAdapter adapter = new ListViewAdapter(container.getContext(), 
      android.R.layout.simple_list_item_1, R.id.textview1); 
     adapter.notifyDataSetChanged(); 
     lv.setAdapter(adapter); 

     return v; 
    } 
} 

입니다 그리고 이것은 내가 ListAdapter

public class ListViewAdapter extends ArrayAdapter { 
    Context context1; 

    public ListViewAdapter(Context context,int resource, int textViewResourceId) { 
     super(context,resource,textViewResourceId); 
     this.context1 = context; 
     System.out.println("here aswell!!!!!!"); 
     // TODO Auto-generated constructor stub 
    } 

    public View getView(int arg0, View convertView, ViewGroup arg2) { 
     // TODO Auto-generated method stub 
     System.out.println("@@@I AM [email protected]@@"); 
     LayoutInflater inflater = LayoutInflater.from(context1); 
     convertView = inflater.inflate(R.layout.tablayout, null); 

     TextView wv = (TextView) convertView.findViewById(R.id.textview1); 
     String summary = "<html><body><h1>This is happening!!!</h1></body></html>"; 
     wv.setText(Html.fromHtml(summary)); 

     convertView.setTag(wv); 

     return convertView; 
    } 
} 

을 구현하는 방법이다 레이아웃 XML은 방법을 찾아 도와주세요

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <ListView 
     android:id="@+id/listview1" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" > 
    </ListView> 

    <TextView 
     android:id="@+id/textview1" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:text="myreader" /> 

</LinearLayout> 

인 내가 할 수있는로 이 일을하라.

답변

48

당신은 생성자에 데이터를 제공하고 생성자 내에서 올바른 전화를 걸 잊어 버렸습니다. 이것은 나를 도왔다 ....!
+2

OMG 감사 : – jonassvensson

+0

'super (context, viewResourceId, items); '이 또한 저에게 효과적입니다. –

1
adapter.notifyDataSetChanged(); 
    lv.setAdapter(adapter); 

스왑 위치

당신이 당신의 어댑터에 대한 데이터 소스를 지정하지 않은 것 같습니다
Layoutinflator=getLayoutInflator(); 
2

. 데이터 소스는 arraylist 또는 커서와 같이 표시 할 데이터를 제공하는 모든 것입니다. 데이터 소스의 데이터가 없으면 getview()는 전혀 호출되지 않습니다.

16

현재 데이터를 제공하지 않습니다. 목록에서 무슨 일이 일어나고 있는지 계속 확인하려면 getCount() 함수를 재정의하십시오.

나는 그것이 이런 종류의 것이라고 생각합니다.

public int getCount(){ 
    return 1; 
} 

이렇게하면 목록에 하나의 항목이 그려집니다. 그리고 getView()를 호출하십시오. 그리고 일단 데이터 소스를 제공하는 방법을 찾으면 getCount()를 목록의 크기로 변경하십시오. 우리가 경우에 우리는 하나

public ArrayAdapter (Context context, int textViewResourceId, T[] objects) 

public ArrayAdapter (Context context, int resource, int textViewResourceId, T[] objects) 

public ArrayAdapter (Context context, int textViewResourceId, List<T> objects) 

public ArrayAdapter (Context context, int resource, int textViewResourceId, List<T> objects) 

를 사용하고 있어야합니다 ArrayAdapter와 getcount 방법 우리는 정의를 작성하는

public int getCount(){ 
    return 100; 
    } 
0
 public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    if (container == null) { 
     View v = (LinearLayout) inflater.inflate(R.layout.tablayout, container, 
       false); 
     ListView lv = (ListView) v.findViewById(R.id.listview1); 
    ListViewAdapter adapter = new ListViewAdapter(container.getContext(), 
     android.R.layout.simple_list_item_1, R.id.textview1); 
    adapter.notifyDataSetChanged(); 
    lv.setAdapter(adapter); 
    } 
    else{ 
    View v = (LinearLayout) inflater.inflate(R.layout.tablayout, container, 
     false); 
     ListView lv = (ListView) v.findViewById(R.id.listview1); 
    ListViewAdapter adapter = new ListViewAdapter(container.getContext(), 
     android.R.layout.simple_list_item_1, R.id.textview1); 
    adapter.notifyDataSetChanged(); 
    lv.setAdapter(adapter); 
} 
return v; 
} 

을 확인하고 오버라이드 (override) 위에서 언급 한 어댑터를 사용하지 않으면 getCount() 메소드를 오버라이드해야한다.

public ListViewAdapter(Context context,int resource, int textViewResourceId, List<YourObjectType> items) { 
    super(context,resource,textViewResourceId, items); 
    this.context1 = context; 
    // TODO Auto-generated constructor stub 
} 
관련 문제