您的位置:首页 > 移动开发 > Android开发

安卓ListView和CheckBox组合使用

2016-11-18 10:04 239 查看
项目需要,使用ListView把存储卡中的某个文件夹下的文件列出来,并且可以对这些文件进行删除处理。

1、布局文件line.xml

用来布局ListView每一项的样式

一个图片文件、一个文本显示、一个选择框,其中CheckBox要做失焦处理,因为我们想要的是点击后进入ListView的监听函数

失焦处理:

android:clickable="false"
android:focusable="false"
android:focusableInTouchMode="false"


<ImageView android:id="@+id/icon"
android:layout_width="40dp"
android:layout_height="40dp"
android:paddingLeft="10dp"/>
<!-- 定义一个TextView,用于作为列表项的一部分。 -->
<TextView android:id="@+id/file_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/icon"
android:textSize="30dp"
android:textColor="@android:color/white"/>

<CheckBox
android:id="@+id/checkBox"
android:text=""
android:layout_width="78dp"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/file_name"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:focusable="false"
android:clickable="false"
android:focusableInTouchMode="false"/>


2、布局文件main.xml
用ListView显示文件,按钮操作文件,共4个按钮:确认删除,全部选择,取消选择,取消删除。
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/line"
android:layout_alignParentTop="true">
</ListView>
<LinearLayout
android:id="@+id/line"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="horizontal">
<Button
android:id="@+id/affirm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="确认删除"
android:textSize="50sp"
android:layout_weight="1"/>
<Button
android:id="@+id/selectAll"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="全部选择"
android:textSize="50sp"
android:layout_weight="1"/>
<Button
android:id="@+id/cancelselect"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="取消选择"
android:textSize="50sp"
android:layout_weight="1"/>
<Button
android:id="@+id/cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="取消删除"
android:textSize="50sp"
android:layout_weight="1"/>
</LinearLayout>

3.、Main.java文件
//定义存放在drawable文件夹下的file.png文件
import static com.nialt.www.listview.R.drawable.file;

public class MainActivity extends AppCompatActivity implements View.OnClickListener, AdapterView.OnItemLongClickListener, AdapterView.OnItemClickListener {

//定义组件
ListView listView;
Button affirm;
Button selectAll;
Button cancelselect;
Button cancel;
List<Map<String,Object>> listitems;
SimpleAdapter simpleAdapter;
CheckBox checkBox1;
@Override
public void onResume()
{
super.onResume();
//绑定组件并且定义监听函数
listView=(ListView)findViewById(R.id.listview);
listView.setOnItemLongClickListener(this);
listView.setOnItemClickListener(this);

affirm=(Button)findViewById(R.id.affirm);
selectAll=(Button)findViewById(R.id.selectAll);
cancelselect=(Button)findViewById(R.id.cancelselect);
cancel=(Button)findViewById(R.id.cancel);

affirm.setOnClickListener(this);
selectAll.setOnClickListener(this);
cancelselect.setOnClickListener(this);
cancel.setOnClickListener(this);

File sdcardDir = Environment.getExternalStorageDirectory();
//得到一个路径,内容是sdcard的文件夹路径和名字
String path=sdcardDir.getPath();
File path1 = new File(path+"/RBMFILE");
File[] files=path1.listFiles();

listitems=new ArrayList<Map<String,Object>>();
for (int i=0;i<files.length;i++)
{
Map<String,Object> listitem=new HashMap<String,Object>();
listitem.put("icon", file);
listitem.put("file_name", files[i].getName());
listitem.put("checkBox", false);
listitems.add(listitem);
}
//创建一个SimpleAdapter
simpleAdapter=new SimpleAdapter(getApplicationContext(),
listitems,
R.layout.line,
new String[]{"icon","file_name","checkBox"},
new int[]{R.id.icon,R.id.file_name, R.id.checkBox});

listView.setAdapter(simpleAdapter);
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

@Override
public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
Log.v("长按输出","长按输出");
return false;
}

@Override
public void onClick(View view) {
Button button=(Button)view;
if (button==affirm)
{
for (int i=0;i<listitems.size();i++)
{
//寻找选中的项
if (listitems.get(i).get("checkBox").toString().equals("true"))
{
String s=listitems.get(i).get("file_name").toString();
Log.v("文件名称",s);
}
}
}
else if (button==selectAll)
{
for (int i=0;i<listitems.size();i++)
{
listitems.get(i).put("checkBox",true);
simpleAdapter.notifyDataSetChanged();
}
}
else if (button==cancelselect)
{
for (int i=0;i<listitems.size();i++)
{
if (listitems.get(i).get("checkBox").toString().equals("true"))
{
listitems.get(i).put("checkBox",false);
simpleAdapter.notifyDataSetChanged();
}
}
}
else if (button==cancel)
{
Log.v("取消删除","cancel");
}
}

@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
String s=listitems.get(i).get("checkBox").toString();
if (s.equals("false"))
{
listitems.get(i).put("checkBox",true);
}
else
{
listitems.get(i).put("checkBox",false);
}
simpleAdapter.notifyDataSetChanged();
}
}
4、实现效果,真机运行的,直接拍图了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android listview