0

我遵循從各種來源獲取列表視圖的所有步驟,但我的一個 似乎沒有顯示任何內容。這個列表視圖代碼(如下所示)被一個標籤片段管理器激活,我不會把它放在這裏,因爲在這裏已經有很多東西了,所以不會把代碼全部弄糟。這很可能是ListFragment本身的問題,但我想它可能是適配器。Android ListView只顯示任何東西,但不會崩潰

發生什麼事什麼都不顯示,只是我已經放在主xml佈局的searchview。我可以在沒有崩潰的標籤之間自由切換,但在我的任何列表視圖中都沒有任何顯示。我有另一個列表,這是一個朋友列表(不包括在此代碼片段中),並使用通用的視圖持有者接口,而且一個不起作用,這表明問題很可能在我的ListFragment中,但我無法找到它。任何幫助表示讚賞,我希望有人能從中學到一些東西,謝謝。

這是我的適配器的設置類別列表

package codeblox.com.listfragmentexample; 

import android.app.Activity; 
import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.CheckBox; 
import android.widget.EditText; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.ToggleButton; 

import java.util.ArrayList; 
import codblox.com.listfragmentexample.R; 

public class SettingsAdapter extends ArrayAdapter<Settings.SettingsCategories> 
{ 
private final Activity context; 
String[] text; 
ArrayList<Settings.SettingsCategories> itemsCopy; 

class ViewHolder 
{ 
    public TextView txt; 
    public CheckBox state; 
    public ImageView settingImg; 
    public EditText input; 
    public ToggleButton toggle; 
    public Button settingInfo; // click it to show what the setting does 
} 

public SettingsAdapter(Context context, ArrayList<Settings.SettingsCategories> items) 
{ 
    super(context, R.layout.settings_category_row, items); 
    this.context = (Activity) context; 
    this.itemsCopy = items; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) 
{ 
    ViewHolder holder = new ViewHolder(); 
    int viewType = this.getItemViewType(position); 

    if(convertView == null) 
    { 
    // inflate the GridView item layout 
     LayoutInflater inflater = LayoutInflater.from(getContext()); 
     convertView = inflater.inflate(R.layout.settings_category_row, parent, false); 
    // initialize the view holder 
     holder = new ViewHolder(); 
     holder.settingImg = (ImageView) convertView.findViewById(R.id.settingCategoryImg); 
     holder.txt = (TextView) convertView.findViewById(R.id.settingCategoryName); 
     convertView.setTag(holder); 
    } else { 
// recycle the already inflated view 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    // fill data 
    holder = (ViewHolder) convertView.getTag(); 
    String s = getItem(position).toString(); 
    holder.txt.setText(itemsCopy.get(position).getSettingText()); 
    holder.settingImg.setImageResource(itemsCopy.get(position).getImgResId()); 

    return convertView; 
} 
} 

這是我的名單片段

package codeblox.com.listfragmentexample 
import android.content.res.Resources; 
import android.os.Bundle; 
import android.support.v4.app.ListFragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 

import java.util.ArrayList; 

import codeblox.com.listfragmentexample.R; 


public class Settings extends ListFragment implements View.OnLongClickListener 
{ 

private ListView settingsList; 
private ArrayList<SettingsCategories> mItems; 

private ArrayAdapter<SettingsCategories> settingsAdapter; 
private int numCategories; 
String[] CategoryArray = new String[] {"Privacy and Security","Account","Networks","Camera Options","Storage","Accesibility","Features"}; 
int[] resIds = new int[] {R.drawable.security_settings_icon,R.drawable.account_settings_icon, 
     R.drawable.network_settings_icon,R.drawable.camera_settings_icon,R.drawable.storage_settings_icon, 
     R.drawable.accessibility_settings_icon,R.drawable.feature_settings_icon,}; 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) 
{ 
    View settingsView = inflater.inflate(R.layout.settings, container, false); 
    settingsList = (ListView)settingsView.findViewById(android.R.id.list); 
    // initialize the items list 
    return settingsView; 
} 

@Override 
public void onViewCreated(View view, Bundle savedInstanceState) 
{ 
    super.onViewCreated(view, savedInstanceState); 
    // remove the dividers from the ListView of the ListFragment 
    settingsList = getListView(); 
    settingsList.setDivider(null); 
    mItems = new ArrayList<SettingsCategories>(); 
    Resources resources = getResources(); 

    for(int c = 0; c < numCategories; c++) 
    { 
     mItems.add(new SettingsCategories(CategoryArray[c],resIds[c])); 
    } 

    // initialize and set the list adapter 
    // settingsAdapter = new SettingsAdapter(this.getActivity(), mItems); 

    setListAdapter(new SettingsAdapter(getActivity(), mItems)); 
    settingsList.setAdapter(settingsAdapter); 

} 

public Settings() 
{ 

    this.numCategories = CategoryArray.length; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
} 

@Override 
public boolean onLongClick(View v) 
{ 
    return false; 
} 
@Override 
public void onListItemClick(ListView l, View v, int position, long id) 
{ 
    Object i = l.getItemAtPosition(position); 
} 

public class SettingsCategories 
{ 
    private String settingText; 
    private int imgResId; 

    SettingsCategories(String settingText,int imgResId) 
    { 
    this.settingText = settingText; 
    this.imgResId = imgResId; 
    } 

    public String getSettingText() 
    { 
     return this.settingText; 
    } 
    public int getImgResId() 
    { 
     return this.imgResId; 
    } 
} 
} 

最後這些都是我的XML佈局(第一個是主視圖和第二一個是列表中單個項目的視圖

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" 
> 
<SearchView 
    android:id="@+id/searchFunction" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" > 
</SearchView> 

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

這表示單個項目在列表中

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

<ImageView 
    android:layout_width="52dp" 
    android:layout_height="52dp" 
    android:id="@+id/settingCategoryImg" 
/> 

<TextView 
    android:layout_width="fill_parent" 
    android:layout_height="52dp" 
    android:text="" 
    android:id="@+id/settingCategoryName" 
    android:layout_alignParentTop="true" 
    android:layout_toRightOf="@+id/settingCategoryImg" 
/> 
</RelativeLayout> 
+0

刪除'settingsList = getListView();'我想你初始化您的問題就解決了,在'onCreateView',在'onViewCreated'中檢查'numCategories', –

+0

將Log記錄在一步。可能你會發現愚蠢的錯誤。 –

+0

是否已經解決。 –

回答

1

您正在設置空適配器,因此它不刷新。 你被註釋掉初始化部分

支票下面的方法:

@Override 
public void onViewCreated(View view, Bundle savedInstanceState) 
{ 
    super.onViewCreated(view, savedInstanceState); 
    // remove the dividers from the ListView of the ListFragment 
    settingsList = getListView(); 
    settingsList.setDivider(null); 
    mItems = new ArrayList<SettingsCategories>(); 
    Resources resources = getResources(); 

    for(int c = 0; c < numCategories; c++) 
    { 
     mItems.add(new SettingsCategories(CategoryArray[c],resIds[c])); 
    } 

    // initialize and set the list adapter 
    // settingsAdapter = new SettingsAdapter(this.getActivity(), mItems); 

    setListAdapter(new SettingsAdapter(getActivity(), mItems)); 
    settingsList.setAdapter(settingsAdapter); 

} 

你正在使用ListFragement並再次充氣佈局。這不是一個好主意。當你延伸listfragment然後充氣的佈局是不需要的,並修改上述類似方法:

@Override 
public void onViewCreated(View view, Bundle savedInstanceState) 
{ 
    super.onViewCreated(view, savedInstanceState); 
    // remove the dividers from the ListView of the ListFragment 
    settingsList = getListView(); 
    settingsList.setDivider(null); 
    mItems = new ArrayList<SettingsCategories>(); 
    Resources resources = getResources(); 

    for(int c = 0; c < numCategories; c++) 
    { 
     mItems.add(new SettingsCategories(CategoryArray[c],resIds[c])); 
    } 

    // initialize and set the list adapter 
    settingsAdapter = new SettingsAdapter(this.getActivity(), mItems); 

    //setListAdapter(new SettingsAdapter(getActivity(), mItems)); 
    settingsList.setAdapter(settingsAdapter); 

}