android 建立多层文件夹代码,Android实现多级列表中的新建功能

本文实例为大家分享了Android实现多级列表中的新建功能,供大家参考,具体内容如下

多级列表的页面实现比较简单,所以把新建的功能拿出来了。

窗口代码

/**

* 新建一个第一级列表的条目

* 1.选择图片和附件都用Intent.ACTION_GET_CONTENT实现

* 2.打开文件用Intent.ACTION_VIEW实现

* 3.回传的URI需要转化成真实路径

* 4.提交数据之后需要刷新列表

*/

public class SectionNewActivity extends AppCompatActivity implements View.OnClickListener {

private static final String TAG = "SectionNewActivity";

@BindView(R.id.tv_title_middle)

TextView title;

@BindView(R.id.title_left)

ImageView back;

@BindView(R.id.edit_tv)

TextView edit;

@BindView(R.id.filter_tv)

TextView filter;

@BindView(R.id.section_new_logo)

ImageView sectionLogo;

@BindView(R.id.section_new_manager)

TextView sectionManager;

@BindView(R.id.section_new_title)

TextView sectionTitle;

@BindView(R.id.section_new_desc)

TextView sectionDesc;

@BindView(R.id.tv_upload_attach)

TextView selectAttach;

@BindView(R.id.lv_attach)

ListView mListView;

private Context mContext;

private List mAttachList;

private AttachmentListAdapter mAdapter;

@Override

protected void onCreate(@Nullable Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_section_new);

ButterKnife.bind(this);

initView();

initData();

initListener();

}

private void initData() {

mContext = this;

//初始化数据源

mAttachList = new ArrayList<>();

mAdapter = new AttachmentListAdapter(mAttachList, mContext);

mListView.setAdapter(mAdapter);

}

private void initView() {

title.setText("新建板块");

edit.setVisibility(View.VISIBLE);

edit.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_send_black_24dp, 0, 0, 0);

}

private void initListener() {

back.setOnClickListener(this);

edit.setOnClickListener(this);

filter.setOnClickListener(this);

sectionLogo.setOnClickListener(this);

sectionManager.setOnClickListener(this);

selectAttach.setOnClickListener(this);

//点击附件列表条目的删除按钮,删除对应附件

mAdapter.setmCallback((view, position) -> {

mAttachList.remove(position);

mAdapter.notifyDataSetChanged();

});

//点击附件列表弹出打开方式

mListView.setOnItemClickListener((parent, view, position, id) -> {

ClsAttachMent clsAttachMent = mAttachList.get(position);

Intent intent = new Intent();

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

intent.setAction(Intent.ACTION_VIEW);

intent.setDataAndType(Uri.parse(clsAttachMent.getUri()), "*/*");

startActivity(intent);

});

}

@Override

public void onClick(View v) {

if (v.getId() == R.id.title_left) {

finish();

}

if (v.getId() == R.id.edit_tv) {

submit();

}

if (v.getId() == R.id.section_new_logo) {

//打开手机原生的文件管理器,并且选取内容

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);

intent.addCategory(Intent.CATEGORY_OPENABLE);

//文件类型为图片

intent.setType("image/*");

startActivityForResult(intent, 16352);

}

if (v.getId() == R.id.section_new_manager) {

Intent intent = new Intent(mContext, UserSelectActivity.class);

startActivityForResult(intent, 12345);

}

if (v.getId() == R.id.tv_upload_attach) {

//上传的附件数量不能超过4个

if (mAttachList.size() < 4) {

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);

intent.addCategory(Intent.CATEGORY_OPENABLE);

intent.setType("*/*");

startActivityForResult(intent, 12367);

if (mAttachList.size() == 0) {

Toast.makeText(mContext, R.string.upload_warning, Toast.LENGTH_LONG).show();

}

} else {

Toast.makeText(mContext, "附件数量已达上限!", Toast.LENGTH_SHORT).show();

}

}

}

private void submit() {

Toast.makeText(mContext, "在此处调用接口!", Toast.LENGTH_SHORT).show();

finish();

}

@Override

//requestCode要对应上,resultCode都为默认值RESULT_OK

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

//选择图片完成之后使用glide加载到控件上,此处有时需要把图片上传给后台

//提交数据的时候传图片在后台的路径

if (requestCode == 16352 && resultCode == RESULT_OK) {

Glide.with(mContext).load(data.getData()).into(sectionLogo);

}

//打开选择用户的页面,根据传的参数不同页面也不同,默认是单选页面

if (requestCode == 12345 && resultCode == RESULT_OK) {

ClsNormalUser user = data.getParcelableExtra("user");

sectionManager.setText(user.getCName());

}

//遍历已经上传的附件列表,如果已经存在就弹出提示

if (requestCode == 12367 && resultCode == RESULT_OK) {

String uri = data.getData().toString();

if (mAttachList.size() > 0) {

for (int i = 0; i < mAttachList.size(); i++) {

if (uri.equals(mAttachList.get(i).getUri())) {

Toast.makeText(mContext, "请选择不同文件!", Toast.LENGTH_SHORT).show();

break;

}

if (i == mAttachList.size() - 1) {

addAttach(data);

break;

}

}

} else {

addAttach(data);

}

}

super.onActivityResult(requestCode, resultCode, data);

}

private void addAttach(Intent data) {

//这里使用第三方库ucrop的getPath方法,也可以自己实现uri转换为path

File file = new File(getPath(mContext, data.getData()));

ClsAttachMent clsAttachMent = new ClsAttachMent();

String name = file.getName();

String type = name.split("\\.")[1];

String size = file.length() + "";

clsAttachMent.setSize(size);

clsAttachMent.setFilename(name);

clsAttachMent.setUri(data.getData().toString());

//这里需要调用上传接口

uploadFile(file.getPath());

mAttachList.add(clsAttachMent);

mAdapter.notifyDataSetChanged();

}

private void uploadFile(String path) {

Toast.makeText(mContext, "在此处调用接口!", Toast.LENGTH_SHORT).show();

}

}

布局文件代码

android:layout_width="match_parent"

android:background="@color/ghostwhite"

android:layout_height="match_parent">

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="vertical">

android:id="@+id/section_new_logo"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:scaleType="centerCrop"

android:background="@color/white"

android:src="@drawable/logo" />

android:id="@+id/section_new_title"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_margin="10dp"

android:background="@null"

android:hint="请输入名称"

android:inputType="text"

android:textColor="@color/black" />

android:id="@+id/section_new_desc"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_margin="10dp"

android:background="@null"

android:gravity="top|start"

android:hint="请输入内容"

android:inputType="textMultiLine"

android:minHeight="100dp"

android:textColor="@color/black" />

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_margin="10dp"

android:orientation="horizontal">

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="选择版主:"

android:textColor="@color/black"

android:textSize="18sp" />

android:id="@+id/section_new_manager"

android:layout_width="0dp"

android:layout_height="wrap_content"

android:layout_weight="1"

android:drawableEnd="@drawable/ic_arrow_drop_down_black_24dp"

android:text="default user"

android:textColor="@color/black"

android:textSize="18sp" />

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:gravity="center_vertical"

android:background="@color/white"

android:orientation="horizontal">

android:layout_width="200dp"

android:layout_height="wrap_content"

android:layout_marginStart="20dp"

android:gravity="center_vertical"

android:minHeight="30dp"

android:text="文件名:"

android:textColor="@color/black" />

android:layout_width="100dp"

android:layout_height="30dp"

android:gravity="center_vertical"

android:text="文件大小:"

android:textColor="@color/black" />

android:layout_width="wrap_content"

android:layout_height="30dp"

android:gravity="center_vertical"

android:text="操作:"

android:textColor="@color/black" />

android:id="@+id/lv_attach"

android:layout_width="match_parent"

android:layout_height="160dp"

android:divider="@null" />

android:id="@+id/tv_upload_attach"

style="@style/Widget.AppCompat.Button"

android:layout_width="wrap_content"

android:layout_height="40dp"

android:layout_gravity="end"

android:text="添加附件"

android:textColor="@color/black"

android:textSize="16sp" />

适配器代码

public class AttachmentListAdapter extends BaseAdapter {

private List mList;

private LayoutInflater mInflater;

private Callback mCallback;

//自定义回调接口,用于传值

public interface Callback {

void onClick(View view, int position);

}

public AttachmentListAdapter(List attachments, Context mContext) {

this.mList = attachments;

mInflater = LayoutInflater.from(mContext);

}

public void setmCallback(Callback mCallback) {

this.mCallback = mCallback;

}

@Override

public int getCount() {

return mList.size();

}

@Override

public ClsAttachMent getItem(int position) {

return mList.get(position);

}

@Override

public long getItemId(int position) {

return position;

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {

ClsAttachMent clsAttachMent = mList.get(position);

ViewHolder holder;

if (convertView == null) {

holder = new ViewHolder();

convertView = mInflater.inflate(R.layout.item_attchment_list, null);

holder.delete = convertView.findViewById(R.id.attachment_delete);

holder.name = convertView.findViewById(R.id.attachment_name);

holder.size = convertView.findViewById(R.id.attachment_size);

convertView.setTag(holder);

} else {

holder = (ViewHolder) convertView.getTag();

}

holder.name.setText(clsAttachMent.getFilename());

long length = Long.parseLong(clsAttachMent.getSize());

holder.size.setText(length / 1024 + "KB");

//将position放在tag里面

holder.delete.setTag(position);

holder.delete.setOnClickListener(v -> {

//触发点击事件的时候将position回传

mCallback.onClick(v, (Integer) v.getTag());

});

return convertView;

}

private class ViewHolder {

TextView name;

TextView size;

TextView delete;

}

}

效果如图:

a4f0f625d721474921e47c0abff3b6ed.gif

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值