1

그래, 표준 Android 템플릿 (ViewPager의 ActionBar 탭)으로 만든 3 개의 탭으로 주 활동을했습니다. List<AppInfo> 있는데 두 번째 탭에 행 당 2 텍스트 필드 ListView에 표시 할 일부 데이터가 있습니다.사용자 정의 ArrayAdapter를 사용하여 MainActivity의 탭에 사용자 정의 ListFragment를 표시하는 방법

아래의 코드는 같은 구성되어

ArrayAdapterList<AppInfo> 있습니다. 또한 app_info_row_layout.xml을 사용합니다.

ListFragment은 listadapter를 ArrayAdapter으로 설정합니다. 또한

list_fragment.xml 사용 내 FragmentPagerAdapter 후 내 ListFragmentgetItem()있어서 여기

의 내 ArrayAdapter와 클래스

public class AppInfoList extends ArrayAdapter<AppInfo>{ 
    private List<AppInfo> list; 
    private final Context context; 

    public AppInfoList(Context context, int resource) { 
     super(context, resource); 
     this.context = context; 
     list = // a list with objects is generated 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent){ 
     AppInfo appInfo = list.get(position); 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     if(convertView == null){ 
      convertView = (View) inflater.inflate(R.layout.app_info_row_layout, null, false); 
     } 

     // text field 1 
     TextView appName = (TextView) convertView.findViewById(R.id.appName); 
     appName.setText(appInfo.packageName); 

     // text field 2 
     TextView totalTime = (TextView) convertView.findViewById(R.id.totalTime); 
     totalTime.setText(" minutes"); // took out logic to make code shorter 

     return convertView; 
     } 
} 

상기 인 생성 간단한 app_info_row_layout.xml 사용

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

    <TextView 
     android:id="@+id/appName" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@+id/appName" 
     android:textSize="30sp" > 
    </TextView> 

    <TextView 
     android:id="@+id/totalTime" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@+id/totalTime" 
     android:textSize="20sp" > 
    </TextView> 

</LinearLayout> 

그리고 여기에 위의 ArrayAdapter와 disp를 사용하기로되어있는 커스텀 ListFragment가 있습니다. 나는 응용 프로그램을 실행하면

public class SectionsPagerAdapter extends FragmentPagerAdapter { 

     public SectionsPagerAdapter(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      // getItem is called to instantiate the fragment for the given page. 
      // Return a PlaceholderFragment for 1st and 3rd tab 

      // return different views/fragments here 
      if(position == 1){ 
       if(appInfoListFragment == null) 
        appInfoListFragment = new AppInfoListFragment(); 
       return appInfoListFragment; 
      } 
      else 
       return PlaceholderFragment.newInstance(position + 1); 
     } 

     @Override 
     public int getCount() { 
      // Show 3 total pages. 
      return 3; 
     } 
} 

다음 나는 FragmentPagerAdapter을 확장하고 만든

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/LinearLayout1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <ListView 
     android:id="@android:id/list" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 
    </ListView> 

    <TextView 
     android:id="@android:id/empty" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" > 
    </TextView> 

</LinearLayout> 

다음 list_fragment.xml를 사용하여 ListView에

public class AppInfoListFragment extends ListFragment{ 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 
     View rootView = inflater.inflate(R.layout.list_fragment, container, false); 
     return rootView; 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState){ 
     super.onActivityCreated(savedInstanceState); 
     AppInfoList appInfoAdapter = new AppInfoList(getActivity(), 0); 
     setListAdapter(appInfoAdapter); 
    } 


} 

에 데이터를 배치의 두 번째 탭은 목록을 표시하는 대신 비어 있습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

배열 어댑터 클래스 :

public class AppInfoList extends ArrayAdapter<AppInfo>{ 
    private List<AppInfo> list; 
    private final Context context; 

    public AppInfoList(Context context, list<Appinfo>) { 
     super(context, R.layout.rowLayout, list); 
     this.context = context; 
     list = list; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent){ 
     AppInfo appInfo = list.get(position); 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     if(convertView == null){ 
      convertView = (View) inflater.inflate(R.layout.app_info_row_layout, null, false); 
     } 

     // text field 1 
     TextView appName = (TextView) convertView.findViewById(R.id.appName); 
     appName.setText(appInfo.packageName); 

     // text field 2 
     TextView totalTime = (TextView) convertView.findViewById(R.id.totalTime); 
     totalTime.setText(" minutes"); // took out logic to make code shorter 

     return convertView; 
     } 
} 

다른 모든 클래스가 잘 될 것 같다

+0

매번 두 개의 텍스트 상자가있는 항목을 만들므로 여기에 사용자 지정 어댑터를 추가해야합니다. –

+0

커스텀 ArrayAdapter가 있습니다. 다른 종류의 어댑터를 의미합니까? – cuddergambino

답변

0

나는 다음과 같은 설정을 사용할 수 있습니다. 참조 용으로 help me에 대한 다음 자습서를 사용했습니다.

+0

그것이 당신을 도운다면이 대답을 upvoting 고려하십시오 :) –