基于Android 写一个食谱列表页代码
时间: 2024-03-06 09:46:55 浏览: 28
好的,下面是一个基于Android的食谱列表页的代码示例:
1. 在XML布局文件中定义食谱列表页的UI界面,包括列表视图、搜索框等组件。
```xml
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<SearchView
android:id="@+id/search_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:queryHint="搜索食谱"/>
<ListView
android:id="@+id/recipe_list"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
```
2. 在Java代码中,定义食谱列表页的Activity类,并实现列表数据的加载和显示逻辑。
```java
public class RecipeListActivity extends AppCompatActivity implements SearchView.OnQueryTextListener {
private ListView mRecipeList;
private RecipeListAdapter mAdapter;
private SearchView mSearchView;
private List<Recipe> mRecipeData;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_recipe_list);
// 初始化UI组件
mRecipeList = findViewById(R.id.recipe_list);
mSearchView = findViewById(R.id.search_view);
mSearchView.setOnQueryTextListener(this);
// 加载数据
mRecipeData = loadRecipeData();
mAdapter = new RecipeListAdapter(this, mRecipeData);
mRecipeList.setAdapter(mAdapter);
}
// 加载食谱数据
private List<Recipe> loadRecipeData() {
// TODO: 从服务器或本地数据库中加载食谱数据
return null;
}
// 实现搜索功能
@Override
public boolean onQueryTextSubmit(String query) {
mAdapter.getFilter().filter(query);
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
mAdapter.getFilter().filter(newText);
return false;
}
}
```
3. 定义食谱列表适配器RecipeListAdapter类,用于将食谱数据绑定到列表视图中。
```java
public class RecipeListAdapter extends BaseAdapter implements Filterable {
private List<Recipe> mRecipeData;
private List<Recipe> mFilteredData;
private LayoutInflater mInflater;
private RecipeFilter mFilter;
public RecipeListAdapter(Context context, List<Recipe> recipeData) {
mRecipeData = recipeData;
mFilteredData = recipeData;
mInflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return mFilteredData.size();
}
@Override
public Object getItem(int position) {
return mFilteredData.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.recipe_list_item, null);
holder = new ViewHolder();
holder.mName = convertView.findViewById(R.id.recipe_name);
holder.mImage = convertView.findViewById(R.id.recipe_image);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
Recipe recipe = mFilteredData.get(position);
holder.mName.setText(recipe.getName());
holder.mImage.setImageResource(recipe.getImageResId());
return convertView;
}
static class ViewHolder {
TextView mName;
ImageView mImage;
}
// 实现列表过滤器
@Override
public Filter getFilter() {
if (mFilter == null) {
mFilter = new RecipeFilter();
}
return mFilter;
}
private class RecipeFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
List<Recipe> filteredList = new ArrayList<>();
if (TextUtils.isEmpty(constraint)) {
filteredList = mRecipeData;
} else {
String filterPattern = constraint.toString().toLowerCase().trim();
for (Recipe recipe : mRecipeData) {
if (recipe.getName().toLowerCase().contains(filterPattern)) {
filteredList.add(recipe);
}
}
}
results.values = filteredList;
results.count = filteredList.size();
return results;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
mFilteredData = (List<Recipe>) results.values;
notifyDataSetChanged();
}
}
}
```
4. 定义食谱数据模型Recipe类,用于封装食谱数据。
```java
public class Recipe {
private String mName;
private int mImageResId;
public Recipe(String name, int imageResId) {
mName = name;
mImageResId = imageResId;
}
public String getName() {
return mName;
}
public int getImageResId() {
return mImageResId;
}
}
```
以上就是一个简单的基于Android的食谱列表页的代码示例。需要注意的是,这只是一个简单的示例,实际开发中需要更加细致地设计和实现UI界面和业务逻辑,并考虑到性能、稳定性和用户体验等方面的问题。