2016-02-19 87 views
0

我正試圖用一些自定義佈局填充導航抽屜。該佈局XML文件如下:導航抽屜中的自定義列表視圖

<android.support.v4.widget.DrawerLayout 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_below="@+id/toolbar"> 

    <!-- The main content view --> 

    <FrameLayout 
     android:id="@+id/content_frame" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:clickable="true"> 

    </FrameLayout> 
    <!-- The navigation drawer --> 

    <LinearLayout 
     android:orientation="vertical" 
     android:id="@+id/left_drawer" 
     android:layout_width="240dp" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:divider="@android:color/transparent" 
     android:dividerHeight="0dp" 
     android:background="#FFFFFF"> 
     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal" 
      android:layout_marginLeft="40px" 
      android:layout_marginTop="40px"> 
      <ImageView 
       android:id="@+id/imgUser" 
       android:src="@drawable/empty_profile" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       /> 
      <LinearLayout 
       android:orientation="vertical" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_marginLeft="20px" 
       android:layout_marginTop="20px"> 
       <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:textSize="15sp" 
        android:text="Waqas Ahmed Ansari"/> 
       <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="63km"/> 
       <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="Joined: Feb '16"/> 
      </LinearLayout> 

     </LinearLayout> 

     <ListView 
      android:id="@+id/lstDrawerItems" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:choiceMode="singleChoice" 
      android:layout_marginTop="20sp" /> 

    </LinearLayout> 
</android.support.v4.widget.DrawerLayout> 

然後我做了一個CustomAdapter類ListView lstDrawerItems 這。

public class CustomAdapter extends BaseAdapter { 
public ArrayList<HashMap<String, String>> list; 
Activity activity; 
TextView txtFirst; 
ImageView imgView; 

public CustomAdapter(Activity activity, ArrayList<HashMap<String, String>> list) { 
    super(); 
    this.activity=activity; 
    this.list=list; 
} 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 

    LayoutInflater inflater=activity.getLayoutInflater(); 

    if(convertView == null){ 
     convertView = inflater.inflate(R.layout.custom_drawer_list, null); 

     txtFirst = (TextView) convertView.findViewById(R.id.drawer_itemName); 
     imgView = (ImageView) convertView.findViewById((R.id.drawer_icon)); 
    } 

    HashMap<String, String> map=list.get(position); 
    txtFirst.setText(map.get("name")); 
    imgView.setImageResource(Integer.parseInt(map.get("imgDrawerIcon"))); 
    return convertView; 
} 

@Override 
public int getCount() { 
    return 0; 
} 

@Override 
public Object getItem(int position) { 
    return null; 
} 

@Override 
public long getItemId(int position) { 
    return 0; 
} 

}

當我設置列表適配器,我無法看到任何東西。 我在這裏設置自定義適配器。 CustomAdapter adapter = new CustomAdapter(HomeNoVehicle.this, list); ListView drawerList = (ListView) findViewById(R.id.lstDrawerItems); drawerList.setAdapter(adapter); enter image description here

但是,當我設置項屬性,如果列表,它工作得很好。 enter image description here 找不出問題所在。

+0

你嘗試過什麼樣的方法(和失敗的)那麼遠?此外,你只是試圖在每個項目中使用圖片和文本進行列表視圖? –

+0

我製作了CustomAdapter類,充氣自定義列表視圖。以不同的方式試用這種方法。是的,我試圖使用圖片和文本進行列表視圖,但是具有自定義視圖的導航抽屜 –

+1

嘗試在BaseAdapter中實現'getCount()',適配器使用它來了解您的數據的大小,如果您離開它設置爲0它永遠不會打印您的列表。您可以使用我的代碼以獲取有關如何以基本方式實現基礎適配器的所有功能的參考。 –

回答

0

爲了製作一個自定義列表,我喜歡開始的方式是設計單元格或希望在列表中顯示的單元格。事情也許是這樣的:

Custom Cell

然後,我想做一個類去與該小區:

public class ProfileCell extends RelativeLayout { 
    ImageView imageView; 
    TextView name; 
    TextView dateJoined; 
    TextView distance; 

    String nameText; 
    String dateJoinedText; 
    String distanceText; 

    public ProfileCell(Context context) { 
     super(context); 
     inflate(context, R.layout.nav_list_row, this); 
     name = (TextView)findViewById(R.id.name); 
     dateJoined = (TextView)findViewById(R.id.date_joined); 
     distance = (TextView)findViewById(R.id.distance); 
     imageView = (ImageView)findViewById(R.id.imgUser); 
     //set Image to a default value 
     imageView.setImageResource(R.mipmap.ic_launcher); 
    } 
    public String getNameText() { 
     return nameText; 
    } 

    public void setNameText(String nameText) { 
     this.nameText = nameText; 
     name.setText(nameText); 
    } 

    public ImageView imageView() { 
     return imageView; 
    } 
    public String getDateJoinedText() { 
     return dateJoinedText; 
    } 

    public void setDateJoinedText(String dateJoinedText) { 
     this.dateJoinedText = dateJoinedText; 
     dateJoined.setText(dateJoinedText); 
    } 

    public String getDistanceText() { 
     return distanceText; 
    } 

    public void setDistanceText(String distanceText) { 
     this.distanceText = distanceText; 
     distance.setText(distanceText); 
    } 
} 

然後我也覺得方便的實現能夠掌握的信息類我希望把在該單元格:

public class Profile {//Information about Users Profile 



    public String name; 
    public String dateJoined; 
    public String distance; 
/////////possibly have image url here .... 

    public Profile(String name, String dateJoined, String distance) 
    { 
     this.name = name; 
     this.dateJoined = dateJoined; 
     this.distance = distance; 
    } 

} 

然後,我讓我的自定義適配器類:

public class CustomAdapter extends BaseAdapter { 
    ArrayList<Profile> profiles; 
    Context context; 

    public CustomAdapter(Context context, ArrayList<Profile> profiles) 
    { 
     this.context = context; 
     this.profiles = profiles; 
    } 

    @Override 
    public int getCount() { 
     return profiles.size(); 
    } 

    @Override 
    public Profile getItem(int position) { 
     return profiles.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     if (convertView == null) 
     { 
      //Custom Cell is inflated inside of the Profile view class 
      convertView = new ProfileCell(context); 

     } 
     ProfileCell cell = (ProfileCell) convertView; 
     Profile profile = getItem(position); 
     cell.setNameText(profile.name); 
     cell.setDateJoinedText(profile.dateJoined); 
     cell.setDistanceText(profile.distance); 
     //Then you would set the image view to something... 
     // cell.imageView().setImageResource(R.mipmap.ic_launcher); 
     //something like that maybe 

     return cell; 
    } 
} 

然後,如果我已經建立了我的列表視圖,我想它,在你的情況下,導航抽屜裏面,然後你的導航活動的內部,你可以這樣做:

//A list of data to display in list 
     ArrayList<Profile> profiles = new ArrayList<>(); 

     for (int i = 0; i < 15; i++) 
     { 
      profiles.add(profile);//Adding same profile over an over 
     } 

     CustomAdapter adapter = new CustomAdapter(this,profiles); 

     listView.setAdapter(adapter); 

然後這會顯示什麼你把這些細胞。

我把這裏這件事的全碼: https://github.com/amffz9/NavigationProject

+0

問題在於'ListView','left_drawer'的最後一個孩子。我試圖讓這個列表查看一個圖片和文字的自定義列表。休息是否順利 –

+0

因此,在我的答案中加入了一個自定義適配器,它不起作用?適合您的項目可能需要做一些細微的更改。你在做什麼會得到什麼樣的結果?在您的問題中添加一些java代碼可能是一個好主意。瞭解你如何在Java端進行設置。 –

+0

我在編輯我的問題。我無法看到具有自定義佈局的「ListView」。 –