android_generate_list_adapter
Efficiently create Android RecyclerView adapters and layouts for DHIS2-style lists, with options for shimmer placeholders, pull-to-refresh, and sticky headers to enhance UI functionality.
Instructions
Generate Android RecyclerView adapter and layout for DHIS2-style lists
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| adapterName | No | Adapter class name | |
| itemLayout | No | ViewBinding layout base name (e.g., item_data_element) | |
| pullToRefresh | No | Include pull-to-refresh pattern | |
| shimmer | No | Include shimmer placeholder pattern | |
| stickyHeaders | No | Include sticky headers in list |
Implementation Reference
- src/index.ts:1112-1115 (handler)MCP tool handler that receives arguments, calls generateAndroidListAdapter, and returns the generated Android RecyclerView adapter code as text content.case 'android_generate_list_adapter': const aListArgs = args as any; const aList = generateAndroidListAdapter(aListArgs); return { content: [{ type: 'text', text: aList }] };
- src/webapp-generators.ts:1765-1804 (handler)Core implementation function that generates Kotlin RecyclerView.Adapter code and corresponding XML item layout for Android list display.export function generateAndroidListAdapter(args: any): string { const { adapterName = 'DataElementAdapter', itemLayout = 'item_data_element' } = args; return `# Android RecyclerView Adapter: ${adapterName} ## Adapter (Kotlin) \`\`\`kotlin class ${adapterName}(private val items: MutableList<DataElement>) : RecyclerView.Adapter<${adapterName}.ViewHolder>() { class ViewHolder(val binding: ${camelToPascal(itemLayout)}Binding) : RecyclerView.ViewHolder(binding.root) override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { val inflater = LayoutInflater.from(parent.context) val binding = ${camelToPascal(itemLayout)}Binding.inflate(inflater, parent, false) return ViewHolder(binding) } override fun onBindViewHolder(holder: ViewHolder, position: Int) { val item = items[position] holder.binding.name.text = item.displayName holder.binding.type.text = item.valueType } override fun getItemCount(): Int = items.size } \`\`\` ## Item Layout (XML) \`\`\`xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="16dp"> <TextView android:id="@+id/name" android:layout_width="match_parent" android:layout_height="wrap_content" android:textStyle="bold"/> <TextView android:id="@+id/type" android:layout_width="match_parent" android:layout_height="wrap_content"/> </LinearLayout> \`\`\` `;
- src/permission-system.ts:175-175 (registration)Tool permission registration mapping 'android_generate_list_adapter' to 'canUseMobileFeatures' permission check.['android_generate_list_adapter', 'canUseMobileFeatures'],