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

Android实现频道列表ListView的编辑/删除/移动等功能

2015-02-11 15:45 1036 查看
Android实现频道列表的编辑、删除、移动等功能,这里我把频道的部分去除掉,只是记录下来关于这个ListVIew的一些编辑、删除和移动等功能,记录下来,以便查询!

实现效果:

布局文件这里就不放了,其实就是一个ListView。

首先定义一个类,用以记录频道的基本信息,包括名字、频道号、图标等信息

package com.Javen;

public class programInfo
{
private String tvNumber = null;
private String tvName = null;
private int tvIconId;
private boolean isDelete = false;
public String getTvNumber()
{
return tvNumber;
}
public void setTvNumber(String tvNumber)
{
this.tvNumber = tvNumber;
}
public String getTvName()
{
return tvName;
}
public void setTvName(String tvName)
{
this.tvName = tvName;
}
public int getTvIcon()
{
return tvIconId;
}
public void setTvIcon(int tvIconId)
{
this.tvIconId = tvIconId;
}
public boolean isDelete()
{
return isDelete;
}
public void setDelete(boolean isDelete)
{
this.isDelete = isDelete;
}

}


将频道信息保存到ArrayList中,然后传入自定义的Adapter中去

package com.Javen;

import java.util.ArrayList;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class programAdapter extends BaseAdapter
{
private Context activity;
private ArrayList<programInfo> mData = null;

public programAdapter(Context context, ArrayList<programInfo> mData)
{
super();
this.activity = context;
this.mData = mData;
}

@Override
public int getCount()
{
return mData.size();
}

@Override
public Object getItem(int position)
{
return mData.get(position);
}

@Override
public long getItemId(int position)
{
return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent)
{
convertView = LayoutInflater.from(activity).inflate(R.layout.program_list_view_item, null);
/* 电视频道的Number号    */
TextView tvItemNumber = (TextView)convertView.findViewById(R.id.programnumber);
tvItemNumber.setText(mData.get(position).getTvNumber());

/* 电视频道的名称      */
TextView tvItemName = (TextView)convertView.findViewById(R.id.programName);
tvItemName.setText(mData.get(position).getTvName());

/* 电视频道Icon  */
ImageView tvItemImage = (ImageView)convertView.findViewById(R.id.programIcon);
tvItemImage.setBackgroundResource(mData.get(position).getTvIcon());

return convertView;
}

}


package com.Javen;

import java.util.ArrayList;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnKeyListener;
import android.view.Window;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;

public class ListViewDemoActivity extends Activity {
/** Called when the activity is first created. */
private static final String TAG = "ListViewDemoActivity";
private ListView listView;
private Button skipButton, editButton, deleteButton, moveButton;
private int moveSelectId;
/* 电视频道号   */
//	private String[] tvNumbers = {"1","2","3","4","5","6","7","8","9","10"};
/* 电视频道名称   */
private String[] tvNames = {"江西卫视", "深圳卫视", "河南卫视", "河北卫视", "湖南卫视", "湖北卫视", "贵州卫视", "安徽卫视", "北京卫视", "天津卫视"};
/* 电视图标  */
private int tvIconId = R.drawable.list_menu_img_dtv_foucus;
/* 电视Item数组   */
private ArrayList<programInfo> tvItems = new ArrayList<programInfo>();
private ArrayList<programInfo> refreshTvItems = new ArrayList<programInfo>();
/* 自定义Adapter */
private programAdapter mAdapter = null;
/* 判断是否移动  */
private boolean isMove = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);

findView();
setListProgramItem();
refreshTvItems.addAll(tvItems);
mAdapter = new programAdapter(ListViewDemoActivity.this, refreshTvItems);
listView.setAdapter(mAdapter);
listView.setDividerHeight(0);
listView.setOnKeyListener(new OnKeyListener()
{

@Override
public boolean onKey(View v, int keyCode, KeyEvent event)
{
// TODO Auto-generated method stub
if(keyCode == KeyEvent.KEYCODE_DPAD_UP && isMove)
{
if(moveSelectId == 0){
return false;
}else{
swapItemObject(moveSelectId, moveSelectId-1);
}
}else if(keyCode == KeyEvent.KEYCODE_DPAD_DOWN && isMove){
if(moveSelectId == (refreshTvItems.size()-1)){
return false;
}else{
swapItemObject(moveSelectId, moveSelectId+1);
}
}
return false;
}
});
}

private void findView()
{
listView = (ListView)findViewById(R.id.listview);
skipButton = (Button)findViewById(R.id.skip);
editButton = (Button)findViewById(R.id.edit);
deleteButton = (Button)findViewById(R.id.delete);
moveButton = (Button)findViewById(R.id.move);
}

private void setListProgramItem()
{
for(int i = 0; i < tvNames.length; i++)
{
programInfo info = new programInfo();
info.setTvNumber(String.valueOf(i));
info.setTvName(tvNames[i]);
info.setTvIcon(tvIconId);
info.setDelete(false);
tvItems.add(info);
}
}

private void RefreshProgramList()
{
for(int i = 0; i < refreshTvItems.size(); i++)
{
programInfo itemInfo = refreshTvItems.get(i);
if(itemInfo.isDelete())
{
refreshTvItems.remove(i);
}
}
for(int i = 0; i < refreshTvItems.size(); i++)
{
refreshTvItems.get(i).setTvNumber(String.valueOf(i));
}
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
// TODO Auto-generated method stub
switch(keyCode)
{
case KeyEvent.KEYCODE_1://跳跃
setListProgramItem();
refreshTvItems.clear();
refreshTvItems.addAll(tvItems);
mAdapter.notifyDataSetChanged();
listView.invalidate();
break;
case KeyEvent.KEYCODE_2://编辑
editFunction();
break;
case KeyEvent.KEYCODE_3://删除
deleteFunction();
break;
case KeyEvent.KEYCODE_4://移动
moveFunction();
break;
}
return super.onKeyDown(keyCode, event);
}

private void editFunction()
{
final View editview = LayoutInflater.from(this).inflate(R.layout.program_edit_dialog, null);
new AlertDialog.Builder(this)
.setTitle(R.string.str_program_edit_dialog_input)
.setIcon(android.R.drawable.ic_dialog_info)
.setView(editview)
.setPositiveButton(R.string.str_program_edit_dialog_ok, new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
EditText editText = (EditText)editview.findViewById(R.id.editText);
String name = editText.getText().toString();

int selectItemID = (int)listView.getSelectedItemId();
tvItems.get(selectItemID).setTvName(name);
mAdapter.notifyDataSetChanged();
listView.invalidate();
}
}).setNegativeButton(R.string.str_program_edit_dialog_cancel, null)
.show();
}

private void deleteFunction()
{
int selectItemId = (int)listView.getSelectedItemId();
refreshTvItems.get(selectItemId).setDelete(true);
RefreshProgramList();
mAdapter.notifyDataSetChanged();
listView.invalidate();
}

private void moveFunction()
{
isMove = !isMove;
moveSelectId = (int)listView.getSelectedItemId();
if(isMove){
skipButton.setVisibility(View.GONE);
editButton.setVisibility(View.GONE);
deleteButton.setVisibility(View.GONE);
}else{
skipButton.setVisibility(View.VISIBLE);
editButton.setVisibility(View.VISIBLE);
deleteButton.setVisibility(View.VISIBLE);
}
}

private void swapItemObject(int prex, int next)
{
programInfo temp = new programInfo();
temp.setTvName(refreshTvItems.get(prex).getTvName());
temp.setTvIcon(refreshTvItems.get(prex).getTvIcon());

refreshTvItems.get(prex).setTvName(refreshTvItems.get(next).getTvName());
refreshTvItems.get(prex).setTvIcon(refreshTvItems.get(next).getTvIcon());

refreshTvItems.get(next).setTvName(temp.getTvName());
refreshTvItems.get(next).setTvIcon(temp.getTvIcon());

mAdapter.notifyDataSetChanged();
listView.invalidate();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐