그래, 표준 Android 템플릿 (ViewPager의 ActionBar 탭)으로 만든 3 개의 탭으로 주 활동을했습니다. List<AppInfo>
있는데 두 번째 탭에 행 당 2 텍스트 필드 ListView에 표시 할 일부 데이터가 있습니다.사용자 정의 ArrayAdapter를 사용하여 MainActivity의 탭에 사용자 정의 ListFragment를 표시하는 방법
아래의 코드는 같은 구성되어
내 ArrayAdapter
가 List<AppInfo>
있습니다. 또한 app_info_row_layout.xml을 사용합니다.
내 ListFragment
은 listadapter를 ArrayAdapter
으로 설정합니다. 또한
list_fragment.xml 사용 내 FragmentPagerAdapter
후 내 ListFragment
그 getItem()
있어서 여기
의 내 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;
}
}
다른 모든 클래스가 잘 될 것 같다
매번 두 개의 텍스트 상자가있는 항목을 만들므로 여기에 사용자 지정 어댑터를 추가해야합니다. –
커스텀 ArrayAdapter가 있습니다. 다른 종류의 어댑터를 의미합니까? – cuddergambino