listViews中的TextView在片段中添加,但显示为空(无文本)

时间:2017-03-24 20:19:31

标签: java android xml listview textview

我想在我的一个片段中显示包含2个textview的项目列表。因为我正在学习如何使用listviews,所以非常简单。

这是我的代码:

public class CommandeFragment extends Fragment{
private BarMenu myMenu;

View myView;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    myView = inflater.inflate(R.layout.commande_layout,container, false);

    myMenu = (BarMenu) getArguments().getSerializable(MENU_KEY);

    List<HashMap<String,String>> aList = new ArrayList<HashMap<String,String>>();

    for(int i = 0; i < myMenu.drinks.size(); i++){
        HashMap<String,String> hm = new HashMap<String, String>();
        hm.put("Name",myMenu.drinks.get(i).drinkName);
        hm.put("Price",myMenu.drinks.get(i).drinkPrice.toString());
        aList.add(hm);
    }

    String[] from = {"drinkName","drinkPrice"};

    int[] to = {R.id.textView3,R.id.textView4};

    SimpleAdapter adapter = new SimpleAdapter(myView.getContext(), aList, R.layout.listview_commande_layout, from, to);

    ListView listView = (ListView) myView.findViewById(R.id.listView);

    listView.setAdapter(adapter);

    return myView;
}

}

当我运行这个时,我得到了一个正确放置的文本视图列表,但问题是里面的文本是空的。我在网上尝试了多个关于xml文件的建议,但我很确定它没问题。

以下是:

listview_commande_layout.xml

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

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

        <TextView
            android:text="TextView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/textView3"
            android:layout_weight="1" />

        <TextView
            android:text="TextView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/textView4"
            android:layout_weight="1" />

    </LinearLayout>

</LinearLayout>

commande_layout.xml

<?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">

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

    <TextView
        android:text="Bar Menu Layout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="102dp"
        android:id="@+id/textView2" />



</RelativeLayout>

1 个答案:

答案 0 :(得分:1)

传递给适配器的列名与HashMap中的列名不匹配(“Name”与“drinkName”)。如果你更新这些以匹配,它应该工作。

for(int i = 0; i < myMenu.drinks.size(); i++){
    HashMap<String,String> hm = new HashMap<String, String>();
    hm.put("Name",myMenu.drinks.get(i).drinkName);
    hm.put("Price",myMenu.drinks.get(i).drinkPrice.toString());
    aList.add(hm);
}

String[] from = {"Name","Price"}; //changed from {"drinkName","drinkPrice"}