因为项目需要这个功能,所以先写了个Demo测试一下,Java学了半吊子然后直接上Android做项目,各位大神可以提出点意见,小弟虚心接纳。
这里的删除按钮还没实现功能,时间不够了得回宿舍睡觉了,不想熬夜太难受。
先上效果图:
下面说实现的大体思路:
1、首先在 MainActivity.java 中初始化一个EditText用于输入数据、两个Button用于点击添加、一个ListView用于存放每个输入的数据(ListView下有两个TextView作为一组Item)、Adapter用于显示ListView中的item、List<bean>集合存放每次创建出来的item实体。
2、mAdapter在构造方法中与MainActivity绑定,并传入List<bean>进行设置item显示的数量、外观,用ViewHolder进行bean.xml中控件的初始化。
3、bean.java中设置set和get方法,构造函数方便new出来的时候直接输入数据,方便动态创建控件。
下面贴上代码:
首先是布局文件:
1、activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<EditText
android:id="@+id/id_ed_data"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1" />
<Button
android:id="@+id/id_btn_add"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="添加" />
<Button
android:id="@+id/id_btn_reduce"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="删除" />
</LinearLayout>
<ListView
android:id="@+id/id_listview"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</ListView>
</LinearLayout>
2、bean.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<TextView
android:text="左边"
android:id="@+id/id_left"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_width="0dp"/>
<TextView
android:text="右边"
android:id="@+id/id_right"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"/>
</LinearLayout>
下面是java文件:
1、MainActivity.java
package com.example.administrator.datademo.activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import com.example.administrator.datademo.R;
import com.example.administrator.datademo.adapter.mAdapter;
import com.example.administrator.datademo.data.bean;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
public static String TAG = "MainActivity";
private Button btn_add;
private Button btn_reduce;
private EditText ed;
private ListView mlistview;
private List<bean> mlist = new ArrayList<bean>();
public mAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化视图
initView();
}
private void initView() {
//初始化获取控件
btn_add = (Button) findViewById(R.id.id_btn_add);
btn_reduce = (Button) findViewById(R.id.id_btn_reduce);
ed = (EditText) findViewById(R.id.id_ed_data);
mlistview = (ListView) findViewById(R.id.id_listview);
//创建ListView的适配器adapter
adapter = new mAdapter(MainActivity.this, mlist);
//设置ListView的适配器
mlistview.setAdapter(adapter);
//设置监听事件
btn_add.setOnClickListener(this);
btn_reduce.setOnClickListener(this);
}
/**
* 用switch case来伺服监听按钮点击事件
* @param view
*/
@Override
public void onClick(View view) {
switch (view.getId()) {
//点击添加按钮
case R.id.id_btn_add:
//ListView动态添加控件(两个TextView)
mlist.add(new bean(new TextView(MainActivity.this), new TextView(MainActivity.this)));
//用for循环进行遍历添加数据,用Iterator遍历也行
for (int i = 0; i < mlist.size(); i++) {
mlist.get(i).getTv1().setText(ed.getText());
mlist.get(i).getTv2().setText(ed.getText());
}
if (mlist.size() > 0)
Log.e(TAG, "动态添加数据成功");
break;
case R.id.id_btn_reduce:
//没有实现功能
break;
}
}
}
2、bean.java
package com.example.administrator.datademo.data;
import android.widget.TextView;
/**
* 用于动态创建和添加数据 那两个TextView为一组的Item
* Created by Administrator on 2018/3/20.
*/
public class bean {
private TextView tv1;
private TextView tv2;
public TextView getTv1() {
return tv1;
}
public bean(TextView tv1, TextView tv2) {
this.tv1 = tv1;
this.tv2 = tv2;
}
public void setTv1(TextView tv1) {
this.tv1 = tv1;
}
public TextView getTv2() {
return tv2;
}
public void setTv2(TextView tv2) {
this.tv2 = tv2;
}
}
3、mAdapter.java
package com.example.administrator.datademo.adapter;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.TextView;
import com.example.administrator.datademo.R;
import com.example.administrator.datademo.data.bean;
import java.util.List;
/**
* Created by Administrator on 2018/3/20.
*/
public class mAdapter extends BaseAdapter {
public static String TAG = "mAdapter";
public List<bean> mList;
public Context mContext;
public LayoutInflater layoutInflater;
public View view1;
public EditText ed;
public mAdapter(Context context, List<bean> list) {
this.mContext = context;
this.mList = list;
layoutInflater = LayoutInflater.from(context);
}
/**
* getCount()方法
* 就是item的数量
* return 多少显示几个item
* @return
*/
@Override
public int getCount() {
Log.e(TAG, "Item数量 " + mList.size());
return mList.size();
}
/**
* 根据下标i获得Item
* @param i
* @return
*/
@Override
public Object getItem(int i) {
return mList.get(i);
}
@Override
public long getItemId(int i) {
Log.e(TAG, "getItemId " + i);
return i;
}
/**
* 绘制这个ListView
* @param i
* @param view
* @param viewGroup
* @return
*/
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
Log.e(TAG, "这个getView的 i = " + i);
ViewHolder holder;
if (view == null) {
//用layoutInflater.inflate获取到bean.xml
//接下来就能使用这个布局里面的控件了
view = layoutInflater.inflate(R.layout.bean, null, true);
holder = new ViewHolder();
holder.textView1 = view.findViewById(R.id.id_left);
holder.textView2 = view.findViewById(R.id.id_right);
view.setTag(holder);
//设置两个TextView获取List集合里new好的控件和得到里面的数据
//这个数据在MainActivity.java的onClick里通过EditText获得
holder.textView1.setText(mList.get(i).getTv1().getText());
holder.textView2.setText(mList.get(i).getTv1().getText());
//刷新这个ListView
notifyDataSetChanged();
} else {
holder = (ViewHolder) view.getTag();
}
return view;
}
static class ViewHolder {
TextView textView1;
TextView textView2;
}
}