Android Studio插件开发之-生成一个kotlin文件

299 阅读1分钟

上面介绍了用模板生成一个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) {
}

\