ListView의 데이터를 롱클릭하면 contextmenu가 뜨고 거기서 메뉴항목을 누르면 EditText 를 띄워서 ListView의 내용을 수정하게끔 하고 싶은데요...
ListView의 데이터를 롱클릭했을때 contextmenu를 띄우는데 까지는 했는데...
contextmenu의 항목을 클릭했을때 edittext를 띄우는건 어케해야 될지 감이 잘 안잡힙니다...
아무래도 뻘짓하고 있는것 같은데...
아래의 소스에서 굵게 표시된 부분이거든요...
contextmenu에는 A메뉴|B메뉴|C메뉴|D메뉴 가 있고.. B메뉴를 눌렀을때 edittext를 띄우고 싶거든요....
아래좀 봐주시고 힌트를 좀 주시면 감사하겠습니다.
그럼 수고하세요.... ^^
import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import android.app.ListActivity;
import android.content.Context;
import android.database.Cursor;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.ContextMenu;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class MenuPlayList extends ListActivity {
private ListView addlist;
private CheckBox cb;
private ArrayList<Music> addsong = new ArrayList<Music>();
int MAX = 1000;
DateNow dn = new DateNow();
String dbTitle;
int dbPlayTiime,dbOrd,dbIdx,dbRepeat,dbChk;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
addlist = getListView();
loadPlayListDB();
}
public void onCreateContextMenu (ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo)
{
super.onCreateContextMenu(menu, v, menuInfo);
AdapterContextMenuInfo menuInfo2 = (AdapterContextMenuInfo) menuInfo;
TextView textView = (TextView)(menuInfo2.targetView).findViewById(R.id.song_item_layout);
String mTitle=null;
mTitle = textView.getText().toString();
menu.setHeaderTitle("'"+mTitle+"' 관리");
menu.add(0,11,0,"A메뉴").setIcon(R.drawable.icon);
menu.add(0,22,0,"B메뉴").setIcon(R.drawable.icon);
menu.add(0,33,0,"C메뉴").setIcon(R.drawable.icon);
menu.add(0,44,0,"D메뉴").setIcon(R.drawable.icon);
}
public boolean onContextItemSelected (MenuItem item)
{
AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo) item.getMenuInfo();
TextView tvTitle = (TextView)(menuInfo.targetView).findViewById(R.id.song_item_layout);
final TextView tvRepeat = (TextView)(menuInfo.targetView).findViewById(R.id.song_repeat);
TextView tvIdx = (TextView)(menuInfo.targetView).findViewById(R.id.song_idx);
TextView tvOrd = (TextView)(menuInfo.targetView).findViewById(R.id.song_ord);
String mTvTitle=null;
String mTvRepeat=null;
String mTvIdx=null;
String mTvOrd=null;
mTvTitle = tvTitle.getText().toString();
mTvRepeat = tvRepeat.getText().toString();
mTvIdx = tvIdx.getText().toString();
mTvOrd = tvOrd.getText().toString();
switch (item.getItemId())
{
case 11: //A메뉴
Toast.makeText(this,"재생순서변경",Toast.LENGTH_SHORT).show();
return true;
case 22: //B메뉴
Toast.makeText(this,"반복회수변경",Toast.LENGTH_SHORT).show();
Log.v(LanguageRecorder.TAG,"onItemClick 111 !!!");
final EditText et = new EditText(this); //사용자입력값을받기위해 Edittext를 생성한다.
String str = et.getText().toString();
et.setText(str);
addlist.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
// TODO Auto-generated method stub
tvRepeat.setText("TEST!!!");
Log.v(LanguageRecorder.TAG,"onItemClick 222 !!!");
}
});
return true;
case 33: //C메뉴
Toast.makeText(this,"파일명변경",Toast.LENGTH_SHORT).show();
return true;
case 44: //D메뉴
Toast.makeText(this,"파일삭제",Toast.LENGTH_SHORT).show();
return true;
}
return true;
}
private void loadPlayListDB()
{
System.gc();
Music[] music = new Music[MAX];
int cnt = 0;
String sql="";
sql = sql + "SELECT * FROM tbl_playlist WHERE FILENAME LIKE '%.3gp'";
Cursor cur = LanguageRecorder.db.rawQuery(sql, null);
if (cur.moveToFirst())
{
do{
dbIdx =cur.getInt(cur.getColumnIndex("IDX"));
dbTitle = cur.getString(cur.getColumnIndex("FILENAME")).replace(LanguageRecorder.recordingFileType,"");
dbPlayTiime = cur.getInt(cur.getColumnIndex("PLAYTIME"));
dbRepeat = cur.getInt(cur.getColumnIndex("REPEAT"));
dbOrd = cur.getInt(cur.getColumnIndex("ORD"));
dbChk = cur.getInt(cur.getColumnIndex("CHK"));
music[cnt] = new Music(dbIdx,dbTitle,dbPlayTiime,dbRepeat,dbOrd,dbChk);
addsong.add(music[cnt]);
cnt ++;
}while(cur.moveToNext());
}
Musicinfo songlist = new Musicinfo(this, R.layout.playlist02, addsong);
setListAdapter(songlist);
addlist.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
addlist.setOnItemLongClickListener(new OnItemLongClickListener()
{
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view,int position, long id) {
//addlist에 대해 Context Menu를 사용하겠다는것을 등록한다.
registerForContextMenu(addlist);
return false;
}
});
}
private class Musicinfo extends ArrayAdapter<Music>
{
private ArrayList<Music> items;
public Musicinfo (Context context, int textViewId, ArrayList<Music> items)
{
super(context, textViewId, items);
this.items = items;
}
@Override
public View getView(int position, View view, ViewGroup parent)
{
View v = view;
if(v == null)
{
LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.playlist02, null);
}
Music m = items.get(position);
if(m != null)
{
cb = (CheckBox)v.findViewById(R.id.check); //체크된 값도 디비로 관리해야긋네...
TextView tv = (TextView)v.findViewById(R.id.song_item_layout);
TextView songPlayTime = (TextView)v.findViewById(R.id.song_playtime);
TextView songRepeat = (TextView)v.findViewById(R.id.song_repeat);
TextView songIdx = (TextView)v.findViewById(R.id.song_idx);
TextView songOrd = (TextView)v.findViewById(R.id.song_ord);
if(m.getChk()==1)
{
cb.setChecked(true); //1이면 true, 0이면 false
}
tv.setText(m.getTitle());
songIdx.setText(""+m.getIdx());
songPlayTime.setText(dn.getFormattedTime(m.getPlayTime()));
songRepeat.setText(m.getRepeat()+"회");
songOrd.setText(""+m.getOrd());
}
return v;
}
}
}
class Music
{
private int Idx;
private String Title;
private int PlayTime;
private int Repeat;
private int Ord;
private int Chk;
private String[] paramTitle;
//public Music(String _title)
public Music(int dbIdx, String _title, int dbPlayTiime, int dbRepeat, int dbOrd, int dbChk)
{
this.Idx = dbIdx;
this.Title = _title;
this.PlayTime = dbPlayTiime;
this.Repeat = dbRepeat;
this.Ord = dbOrd;
this.Chk = dbChk;
}
public int getIdx()
{
return Idx;
}
public String getTitle()
{
return Title;
}
public int getPlayTime()
{
return PlayTime;
}
public int getRepeat()
{
return Repeat;
}
public int getOrd()
{
return Ord;
}
public int getChk()
{
return Chk;
}
}
String str = et.getText().toString();
여기서 EditText를 보여주는게 없는것 같군요.
EditText를 포함하는 dialog를 만들어서 뛰워야 할가 보군요.