android 列表视图中的(文本视图和列表视图)
(Textview and Listview) in Listview for android
我得到 json objects 并用 retrofit2 解析它们。项目有两部分,这部分是其中之一。在这部分,我有很多餐厅,每个餐厅都有菜单。菜单种类繁多(披萨、汉堡……)。这些品种(比萨饼,..)有食品名称和价格(如大意大利比萨 -> 10 美元,小意大利比萨 -> 7 美元)。
现在,我的问题是什么。如果人们点击一家餐厅,就会显示这家餐厅的菜单。菜单有标题(品种)。此外,食品和价格都在这个标题下。这就是每家餐厅和菜单的行变化。修复部分还可以。点击餐厅后,我得到数据(菜单)并发送到片段。我在 MenuFragment.java 中使用 setData() 获取数据。例如,menus.get(0).name是披萨品种,menus.get(1).name是本餐厅的汉堡品种。 menus.get(0)。食物包括披萨品种(大 italian-price、小等)此外,食物是 object。
这部分我的头脑很混乱。我将显示菜单,但菜单有列表视图。这个列表视图有标题(文本视图)和另一个列表视图(食品,价格)。怎么在listview中做listview和texview。
是MenuFragment.java。我们可以说 mainactivity.
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>
解决方案是在 Android 中包含 Header 部分的 ListView。你可以上网搜索一下。
我得到 json objects 并用 retrofit2 解析它们。项目有两部分,这部分是其中之一。在这部分,我有很多餐厅,每个餐厅都有菜单。菜单种类繁多(披萨、汉堡……)。这些品种(比萨饼,..)有食品名称和价格(如大意大利比萨 -> 10 美元,小意大利比萨 -> 7 美元)。 现在,我的问题是什么。如果人们点击一家餐厅,就会显示这家餐厅的菜单。菜单有标题(品种)。此外,食品和价格都在这个标题下。这就是每家餐厅和菜单的行变化。修复部分还可以。点击餐厅后,我得到数据(菜单)并发送到片段。我在 MenuFragment.java 中使用 setData() 获取数据。例如,menus.get(0).name是披萨品种,menus.get(1).name是本餐厅的汉堡品种。 menus.get(0)。食物包括披萨品种(大 italian-price、小等)此外,食物是 object。 这部分我的头脑很混乱。我将显示菜单,但菜单有列表视图。这个列表视图有标题(文本视图)和另一个列表视图(食品,价格)。怎么在listview中做listview和texview。
是MenuFragment.java。我们可以说 mainactivity.
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>
解决方案是在 Android 中包含 Header 部分的 ListView。你可以上网搜索一下。