适配器nevers进入getView方法

时间:2012-07-11 23:32:29

标签: android android-tabhost android-adapter

我有一个标签应用程序,其布局如下:

<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@android:id/tabhost"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
    <RelativeLayout
       android:orientation="vertical"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent"
       android:padding="3dp">
       <FrameLayout
           android:id="@android:id/tabcontent"
           android:layout_width="fill_parent"
           android:layout_height="fill_parent"
           android:layout_weight="1" />
       <TabWidget
           android:id="@android:id/tabs"
           android:layout_width="fill_parent"
           android:layout_height="wrap_content"
           android:layout_alignBottom = "@android:id/tabcontent"
           />
    </RelativeLayout>
</TabHost>

我想调用ListView屏幕,所以我的设计如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal" >

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

</LinearLayout>

并且gridview看起来像

<?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" android:background="#ffffff">

     <ImageView
        android:id="@+id/imageViewContent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        />

        <TextView
        android:id="@+id/textViewCategoryName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        android:paddingLeft="8dip"
        />

</LinearLayout>

我使用以下方法调用适配器:

SectionsAdapter adapter = new SectionsAdapter(Sections.this ,R.layout.sectionviewgridview,
                            appState.MainCategories);
                    // updating listview
                    setListAdapter(adapter);

并且适配器看起来像:

public class SectionsAdapter extends ArrayAdapter<HashMap<String, String>>{

    ArrayList<HashMap<String, String>> mainCategories;

    private final Context context;

    public SectionsAdapter(Context context, int  ResourceId,
            ArrayList<HashMap<String, String>> items)
    {
        super(context, ResourceId);
         this.context = context;
         this.mainCategories = items ;

         Log.d("The count of the hash is",""+items.size()); 

    }

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

{

        Log.d("xxxxxxxxxxxxxxxxxxxxxxxxxxxxx","I'm hereeeeeeeeeeeeeeeeeeeeeeeeee" );


        LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View rowView = inflater.inflate(R.layout.sectionviewgridview, parent, false);

         ImageView ImageViewObject = (ImageView)rowView.findViewById(R.id.imageViewContent);



         try {
                Bitmap bitmap = BitmapFactory.decodeStream((InputStream)new java.net.URL(mainCategories.get(position).get("imageUrl")).getContent());
                 ImageViewObject.setImageBitmap(bitmap); 

            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        Log.d(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>",mainCategories.get(position).get("name"));

         TextView TextViewObject = (TextView) rowView.findViewById(R.id.textViewCategoryName);

         TextViewObject.setText(mainCategories.get(position).get("name"));

        return rowView;




}

}

它永远不会记录getView方法中的内容。知道怎么解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

如果您的ArrayAdapter扩展名使用super(context, ResourceId);回调超级类,那么您必须确保覆盖getCount方法以返回确切的数据大小,否则,适配器我不知道您是否希望使用mainCategories作为下划线数据,并且会创建一个List,其大小为0,并且不会调用getView方法。我不确切地知道您打算如何使用ArrayList Maps,但尝试将其添加到SectionedAdapter

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

如果这不能解决问题,请添加有关您正在做什么的更多详细信息。

答案 1 :(得分:0)

我遇到了同样的问题..

我的布局:

在Relativelayout中定义的ListView和listview的内容是在另一个Relativelayout中定义的两个textview。

问题:

两个textviews宽度被称为0dp,因此getview的位置为0,没有显示内容。

解决:

通过向wrap_content提供两个textviews的宽度来解决。