【问题标题】:Cannot see any content in a ListView while using a HashMap使用 HashMap 时看不到 ListView 中的任何内容
【发布时间】:2012-10-12 12:29:09
【问题描述】:

我正在尝试构建一个自定义Listview,右侧有一个图像、主文本和子文本。主要问题是我没有收到任何错误,并且出现了空白视图。我可以点击它,但在我的ListView 上看不到任何内容。我的代码:

    public class MenuScreen extends Activity  {            
            TextView maintext, subtext;
            ImageView icon ;

                    private static final String [] menuitems = {"Availability","Messages","Greetings","Address Book","Calls","Settings"};
                    private static final int [] menu_icons = {R.drawable.menu_availability,R.drawable.menu_messages,R.drawable.menu_greetings,R.drawable.menu_contacts,R.drawable.menu_calls,R.drawable.menu_settings}; 
                    private static String [] submenu_items = {"1","2","3","4","5","6"};
                    @Override
                        protected void onCreate(Bundle savedInstanceState) {
                            // TODO Auto-generated method stub
                            super.onCreate(savedInstanceState);
                            setContentView(R.layout.menulogin_main);
                            maintext = (TextView)findViewById(R.id.tvMainText);
                            subtext = (TextView)findViewById(R.id.tvSubText);
                            icon = (ImageView)findViewById(R.id.iicon);

                            List<HashMap<String,String>> aList = new ArrayList<HashMap<String,String>>();
                             for(int i=0;i<6;i++){
                                    HashMap<String, String> hm = new HashMap<String,String>();
                                    hm.put("tvMainText", "MainText : " + menuitems[i]);
                                    hm.put("tvSubText","SubText : " + submenu_items[i]);
                                    hm.put("iicon", Integer.toString(menu_icons[i]) );
                                    aList.add(hm);
                                }

                             String[] from = { "iicon","tvMainText","tvSubText" };

                             int[] to = { R.id.iicon , R.id.tvMainText, R.id.tvSubText} ;

                             SimpleAdapter adapter = new SimpleAdapter(getBaseContext(), aList, R.layout.menulogin_main, from, to);

                               // Getting a reference to listview of main.xml layout file
                               ListView listView = ( ListView ) findViewById(R.id.listmenu);

                               // Setting the adapter to the listView
                               listView.setAdapter(adapter);
                            listView.setOnItemClickListener(new OnItemClickListener() {

                                public void onItemClick(AdapterView<?> listview, View view,
                                        int position, long id) {
                                    switch(position){

                                    case 0 :
                                        Intent avail = new Intent(MenuScreen.this,Availability.class);
                                        startActivity(avail);

                                    break;
                                    }

                                }
                            });

                    }

                }

ListView 的布局文件,menulogin_main:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
         android:background="@drawable/background"
        android:orientation="vertical" >


        <ListView
            android:id="@+id/listmenu"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >

        </ListView>

    </LinearLayout>

该行的布局文件,menulogin:

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


        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >

            <ImageView
                android:id="@+id/iicon"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="10dp"
                android:src="@drawable/logon_image" />

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical" >

                <TextView
                    android:id="@+id/tvMainText"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginBottom="5dp"
                    android:layout_marginTop="5dp"
                    android:text="MAIN TEXT"
                    android:textAppearance="?android:attr/textAppearanceLarge" />

                <TextView
                    android:id="@+id/tvSubText"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="SUB TEXT"
                    android:textAppearance="?android:attr/textAppearanceMedium" />
            </LinearLayout>
        </LinearLayout>

    </LinearLayout>

【问题讨论】:

  • 图标不应该是字符串。使用 HashMap 并为图标放置一个 int 。 SimpleAdapter 文档说(关于 to 参数:这些都应该是 TextViews)。 (但里面应该有一个imageview binder,所以我不知道)。

标签: android android-listview hashmap


【解决方案1】:

这可能是因为您使用的布局文件。 Activity 布局 (R.layout.menulogin_main) 具有相同的布局文件,但 ListViews 适配器也使用相同的布局文件。现在,您要么拥有ListView(id 为R.id.listmenu)和行视图(R.id.iiconR.id.tvMainTextR.id.tvSubText)在同一布局(R.layout.menulogin_main)中,ListView 覆盖这些视图或您打算为 ListView 行使用另一种布局,而不是 R.layout.menulogin_main(但这可能会引发异常)。

您应该有一个为ListView 的行设计的特殊布局文件,其中包含所需的视图。

编辑: menu_login 的布局文件:

<?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:id="@+id/iicon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:src="@drawable/ic_launcher" />

    <TextView
        android:id="@+id/tvSubText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_toRightOf="@id/iicon"
        android:text="SUB TEXT"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <TextView
        android:id="@+id/tvMainText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@id/tvSubText"
        android:layout_alignParentTop="true"
        android:layout_marginBottom="5dp"
        android:layout_marginTop="5dp"
        android:layout_toRightOf="@id/iicon"
        android:text="MAIN TEXT"
        android:textAppearance="?android:attr/textAppearanceLarge" />

</RelativeLayout>

【讨论】:

  • 我可以看到我的正文,但看不到子文本
猜你喜欢
  • 1970-01-01
  • 2021-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多