上面介绍了用模板生成一个java文件,接下来介绍用模板生成一个kotlin文件。
在fileTemplates文件夹下创建一个Recycler_DataAdapter.kt.ft文件,文件内容如下:
#if (${PACKAGE_NAME} != "")
package ${PACKAGE_NAME}
#end
import android.util.Log
import android.view.ViewGroup
import androidx.paging.LoadState
import com.iflytek.common.recycler.adapter.CommonDiffUtil
import com.iflytek.common.recycler.adapter.RecyclerCommonAdapter
import com.iflytek.platformbaseandroid.R
/**
* Described by plugin on ${DATE} ${TIME}
* Description : 适配器类
**/
class ${DATA_NAME}Adapter<T : ${DATA_NAME}, VH : ${DATA_NAME}ViewHolder>(${DATA_NAME}_COMPARATOR: CommonDiffUtil<T>) : RecyclerCommonAdapter<T, VH>(${DATA_NAME}_COMPARATOR) {
// 没有想好要做什么操作 2021/12/23
override fun loadFailed(error: LoadState.Error) {
}
// 创建 2021/12/23
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): VH {
val viewHolder = ${DATA_NAME}ViewHolder.create(parent, R.layout.item_poetry_view)
return viewHolder as VH
}
// 绑定 2021/12/23
override fun onBindViewHolder(holder: VH, position: Int) {
holder.bind(getItem(position))
}
companion object {
// 判断是否为同一个item 2021/12/23
val ${DATA_NAME}_COMPARATOR = object : CommonDiffUtil<${DATA_NAME}>() {
// 判断两个item是否代表同一个信息 2021/12/23
override fun areItemsTheSame(oldItem: ${DATA_NAME}, newItem: ${DATA_NAME}): Boolean {
return oldItem.id.equals(newItem.id)
}
// 判断要显示的内容是否完全一致 2021/12/23
override fun areContentsTheSame(oldItem: ${DATA_NAME}, newItem: ${DATA_NAME}): Boolean {
return oldItem == newItem
}
}
}
}
创建一个Action,关键方法为:
// 得到当前项目对象
Project project = anActionEvent.getProject();
//当前窗口View
IdeView ideView = anActionEvent.getRequiredData(LangDataKeys.IDE_VIEW);
//当前选中的路径
PsiDirectory psiDirectory = ideView.getOrChooseDirectory();
//组织Templates参数
String dataName = "Poetry"; //实体类名称,由外部输入
final Properties properties = new Properties(FileTemplateManager.getInstance(project).getDefaultProperties());
properties.setProperty("DATA_NAME", dataName); //实体类名称
properties.setProperty("DATA_NEW", dataName.toLowerCase()); //实体对象名称
properties.setProperty(FileTemplate.ATTRIBUTE_PACKAGE_NAME, "");// 包名,自动获取
// 生成适配器类
final FileTemplate fileTemplate = FileTemplateManager.getInstance(project).getInternalTemplate(templateName);
try {
FileTemplateUtil.createFromTemplate(fileTemplate, fileName, properties, psiDirectory);
} catch (Exception e) {
}
\