思路:我们在activity_main.xml中创建ListView布局,每一个item中放置初始数据,然后在MainActivity中对每一个item添加点击事件,在点击事件中将每一个item中的数据加入到ACache缓存中。最后再添加一个按钮,通过Intent跳转到SecondActivity中,而我们在SecondActivity界面中,就把缓存中的数据再提取出来,组成一个新的ListView.
首先我们需要自定义一个缓存类,我这里取名为item_acache,并且添加了三种方法,代码如下:
package com.example.test;
import android.content.Context;
import android.widget.ArrayAdapter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Created by lenovo on 2017/10/30.
*/
public class item_acache {
private static ArrayList
package com.example.test;
import android.content.Intent;
import android.support.annotation.IntDef;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.NumberPicker;
import android.widget.SimpleAdapter;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {
private ListView listView;
private SimpleAdapter simpleAdapter;
private List> data;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button=(Button)findViewById(R.id.enter);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent(MainActivity.this,SecondActivity.class);
startActivity(intent);
}
});
listView=(ListView)findViewById(R.id.listView);
data=new ArrayList>();
simpleAdapter=new SimpleAdapter(this,getData(),R.layout.item_layout,new String[]{"pic","title","info"},new int[]{R.id.pic,R.id.title,R.id.info});
// SimpleAdapter
// context:上下文
// data:数据源(List extends Mao> data)一个Map所组成的List集合
// 每一个Map都会去对应ListView列表的一行
// 每一个Map(键-值对)中的键必须包含所有在from中所制定的键
// resource:列表项的布局文件ID
// from:Map中的键名
// to:绑定数据视图中的ID,与from成对应关系
listView.setAdapter(simpleAdapter);
listView.setOnItemClickListener(this);
}
private List> getData(){
for(int i=0;i<10;i++){
Mapmap=new HashMap();
map.put("pic",R.mipmap.ic_launcher);
map.put("title","chenwenhao"+i);
map.put("info","info"+i);
//在HashMap对象中通过map.put给每一个控件赋值
//第一个值为每一个控件对应的键
//第二个值为我手动给它赋的值
data.add(map);
}
return data;
}
@Override
public void onItemClick(AdapterView> adapterView, View view, int position, long id) {
HashMap map = (HashMap) adapterView
.getItemAtPosition(position);
//创建对象map获取每一个指定索引所得到的item
Toast.makeText(this,position+"",Toast.LENGTH_SHORT).show();
item_acache acache=new item_acache();
acache.add_goods_Cache(this,map.get("pic"),map.get("title"),map.get("info"));
//得到通过map.get()方法获得每一个键值所对应控件的值,比如map.get("pic"),得到索引为position的item的图片
//最后通过acache.add_goods_Cache将每一个item中的三个控件的值加入缓存(因为我每一个item定义的是三个控件),方法中第一个值为上下文
}
}
以上代码是在MainActivity中给ListView添加数据,并且在点击事件中把数据加入缓存中,接下来我们在SecondActivity中来从缓存中提取数据并且放入到ListView中
package com.example.test;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class SecondActivity extends AppCompatActivity {
private SimpleAdapter simpleAdapter;
private ListView listView;
private List> data;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
data=new ArrayList>();
listView=(ListView)findViewById(R.id.sec_view);
simpleAdapter=new SimpleAdapter(this,new item_acache().get_goods_Cache(this),R.layout.sec_item,new String[]{"pic","title","info"},new int[]{R.id.sec_pic,R.id.sec_title,R.id.sec_info});
listView.setAdapter(simpleAdapter);
}
}
在SimpleAdapter的第二个参数中直接创建item_acache对象并且调用get_goods_Cache()方法得到缓存中的数据,在item_acache类中的get_goods_Cache()返回的是ArrayList对象,因此可以直接传到SimpleAdapter的第二个参数中。