Listview中的(Textview和Listview)for android

时间:2017-12-13 00:15:01

标签: android listview listviewitem

我得到json对象并用retrofit2解析它们。项目有两个部分,这部分就是其中之一。在这部分,我有很多餐厅,每个餐厅都有菜单。菜单有多种(比萨饼,汉堡......)。这些品种(比萨饼,...)有食品名称和价格(如意大利大披萨 - > 10美元,意大利小披萨 - > 7美元)。 现在,我的问题是什么。如果人们点击餐馆,将显示该餐馆的菜单。菜单有标题(品种)。此外,食品和价格都在这个标题下。每个餐厅和菜单都会改变所有行。 Restorant部分是okey。点击餐馆后,我得到数据(菜单)并发送到片段。我在MenuFragment.java中使用setData()获取数据。例如,menus.get(0).name是披萨品种,menus.get(1).name是此restorant中的汉堡品种。而menus.get(0).foods包括披萨品种(大意大利价格,小食品等)。此外,食品是对象。 我的思绪在这一部分很困惑。我将显示菜单,但菜单有listview。此列表视图具有标题(textview)和另一个列表视图(食品,价格)。如何在listview中进行listview和texview。

是MenuFragment.java。我们可以说是主动性。

public class MenuFragment extends Fragment
{
public List<Restaurant.Menu> menus = new ArrayList<>();

public List<RowItemMenu> rowItemMenus;
public ListView mylistview;

public List<String> name = new ArrayList<String>();
public List<Object> foods = new ArrayList<Object>();

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

    //Toast.makeText(getActivity(), "This! " + menus.get(0).name , Toast.LENGTH_LONG).show();

    mylistview = (ListView) view.findViewById(R.id.rest_list);
    CustomAdapterMenu adapter = new CustomAdapterMenu(getActivity(), rowItemMenus);

    for(int i=0; i<menus.size(); i++)
    {
        name.add(menus.get(i).name);
        foods.add(menus.get(i).foods);


        RowItemMenu item = new RowItemMenu(name.get(i), foods.get(i));
        rowItemMenus.add(item);
    }
    adapter.setData(rowItemMenus);
    mylistview.setAdapter(adapter);

    return view;
}

public void setData(List<Restaurant.Menu> menus)
{
    this.menus = menus;
}
}

是CustomAdapterMenu.java(它有结构问题。)

public class CustomAdapterMenu extends BaseAdapter
{
Context context;
List<RowItemMenu> rowItemMenus;

List<RowItemMenu> data;

public ListView mylistview;

public CustomAdapterMenu(List<RowItemMenu> rowItemMenus)
{
    this.rowItemMenus = rowItemMenus;
}

public CustomAdapterMenu(Context context, List<RowItemMenu> rowItemMenus)
{
    this.context = context;
    this.rowItemMenus = rowItemMenus;
}

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

@Override
public Object getItem(int position)
{
    return rowItemMenus.get(position);
}

@Override
public long getItemId(int position)
{
    return rowItemMenus.indexOf(getItem(position));
}

/* private view holder class */
private class ViewHolder
{
    TextView name;
    TextView foodName;
    TextView foodPrice;
}

@Override
public View getView(int position, View convertView, ViewGroup parent)
{
    ViewHolder holder = null;

    LayoutInflater mInflater = (LayoutInflater) context
            .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
    if (convertView == null)
    {
        convertView = mInflater.inflate(R.layout.list_row_menu, null);
        holder = new ViewHolder();
        convertView.setTag(holder);
    }
    else
    {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.name = (TextView) convertView.findViewById(R.id.menu_name);
    holder.foodName = (TextView) convertView.findViewById(R.id.food_name);
    holder.foodPrice = (TextView) convertView.findViewById(R.id.food_price);

    RowItemMenu row_pos = rowItemMenus.get(position);

    holder.name.setText(row_pos.getName());
    holder.foodName.setText(row_pos.getFoodName());
    holder.foodPrice.setText(row_pos.getFoodPrice());

    return convertView;
}

public void setData(List<RowItemMenu> data)
{
    this.data=data;
    notifyDataSetChanged();
}
}

这是RowItemMenu.java(它有结构问题)

public class RowItemMenu
{
private String name;
//private String foodName;
//private String foodPrice;
public List<Object> foods = new ArrayList<Object>();

public RowItemMenu(String name, List<Object> foods)
{
    this.name = name;
    this.foods = foods;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public List<Object> getFoods() {
    return foods;
}

public void setFoods(List<Object> foods) {
    this.foods = foods;
}
}

这是我的主要布局。我将为每一行显示list_row_menu.xml。第一行将显示标题(如披萨品种)和内容(如food_name和food_price,它可以包含10种或更多不同的食物)

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFFFFF"
tools:context="oz.ncclife.fragments.RestFragment">

<ListView
    android:id="@+id/rest_list"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:dividerHeight="10dp"/>

</FrameLayout>

这是list_row_menu.xml,它显示menu_name(如披萨品种)和menu_list。 menu_list将为每行显示不同的food_name和food_price。也就是说,它是list_row_menu_food.xml

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

<TextView
    android:id="@+id/menu_name"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:textSize="25dp"
    android:textStyle = "bold"
    android:paddingTop="10dp"/>

<ListView
    android:id="@+id/menu_list"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:dividerHeight="10dp"/>

</LinearLayout>

这是list_row_menu_food.xml,它显示了food_name(如意大利披萨)和food_price一行。

<?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="horizontal"
android:weightSum="1">

<TextView
    android:id="@+id/food_name"
    android:layout_width="0dip"
    android:layout_weight="0.8"
    android:layout_height="wrap_content"
    android:textSize="25dp"
    android:textStyle = "bold"
    android:paddingTop="10dp" />

<TextView
    android:id="@+id/food_price"
    android:layout_width="0dip"
    android:layout_weight="0.2"
    android:layout_height="wrap_content"
    android:paddingTop="10dp"
    android:textSize="25dp"
    android:textStyle="bold" />

</LinearLayout>

1 个答案:

答案 0 :(得分:0)

解决方案是在Android中使用Section Header的ListView。您可以在互联网上搜索。