You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
test-1/FoldersListAdapter.java

132 lines
4.4 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package net.micode.notes.ui;
import android.content.Context;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.PopupMenu;
import android.widget.PopupMenu.OnMenuItemClickListener;
import net.micode.notes.R;
// 下拉菜单类,用于创建和管理与按钮关联的下拉菜单
public class DropdownMenu {
// 关联的按钮
private Button mButton;
// 弹出式菜单对象
private PopupMenu mPopupMenu;
// 菜单对象
private Menu mMenu;
// 构造函数,初始化下拉菜单相关组件
public DropdownMenu(Context context, Button button, int menuId) {
mButton = button;
// 设置按钮的背景为下拉图标
mButton.setBackgroundResource(R.drawable.dropdown_icon);
// 创建与按钮关联的弹出式菜单
mPopupMenu = new PopupMenu(context, mButton);
mMenu = mPopupMenu.getMenu();
// 填充菜单资源
mPopupMenu.getMenuInflater().inflate(menuId, mMenu);
// 设置按钮的点击事件,点击时显示弹出式菜单
mButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
mPopupMenu.show();
}
});
}
// 设置下拉菜单菜单项的点击监听器
public void setOnDropdownMenuItemClickListener(OnMenuItemClickListener listener) {
if (mPopupMenu!= null) {
mPopupMenu.setOnMenuItemClickListener(listener);
}
}
// 根据ID查找菜单项
public MenuItem findItem(int id) {
return mMenu.findItem(id);
}
// 设置按钮的文本(即下拉菜单的标题)
public void setTitle(CharSequence title) {
mButton.setText(title);
}
}
package net.micode.notes.ui;
import android.content.Context;
import android.database.Cursor;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CursorAdapter;
import android.widget.LinearLayout;
import android.widget.TextView;
import net.micode.notes.R;
import net.micode.notes.data.Notes;
import net.micode.notes.data.Notes.NoteColumns;
// 文件夹列表适配器类,用于将文件夹数据适配到列表视图中
public class FoldersListAdapter extends CursorAdapter {
// 查询文件夹数据的投影包括ID和片段名称
public static final String[] PROJECTION = {
NoteColumns.ID,
NoteColumns.SNIPPET
};
// 投影中ID列的索引
public static final int ID_COLUMN = 0;
// 投影中名称列的索引
public static final int NAME_COLUMN = 1;
// 构造函数,初始化父类
public FoldersListAdapter(Context context, Cursor c) {
super(context, c);
// TODO Auto-generated constructor stub
}
// 创建新的视图项返回一个FolderListItem实例
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return new FolderListItem(context);
}
// 绑定视图数据根据文件夹ID设置显示的名称
@Override
public void bindView(View view, Context context, Cursor cursor) {
if (view instanceof FolderListItem) {
String folderName = (cursor.getLong(ID_COLUMN) == Notes.ID_ROOT_FOLDER)? context
.getString(R.string.menu_move_parent_folder) : cursor.getString(NAME_COLUMN);
((FolderListItem) view).bind(folderName);
}
}
// 根据位置获取文件夹名称
public String getFolderName(Context context, int position) {
Cursor cursor = (Cursor) getItem(position);
return (cursor.getLong(ID_COLUMN) == Notes.ID_ROOT_FOLDER)? context
.getString(R.string.menu_move_parent_folder) : cursor.getString(NAME_COLUMN);
}
// 文件夹列表项内部类继承自LinearLayout用于显示文件夹名称
private class FolderListItem extends LinearLayout {
private TextView mName;
// 构造函数,初始化视图并获取名称文本视图
public FolderListItem(Context context) {
super(context);
inflate(context, R.layout.folder_list_item, this);
mName = (TextView) findViewById(R.id.tv_folder_name);
}
// 绑定名称数据到文本视图
public void bind(String name) {
mName.setText(name);
}
}
}