ArrayAdapter를 상속받아 텍스트와 엑스버튼이 나오는 리스트adapter를 만들면 어댑터 연결까지는 문제가 없는 것 같은데 로그를 찍어보니
자꾸 getView()를 두 번씩 호출하네요. 뭐가 문제일까요?
public void fillData()
{
if(layoutMode == START_SPAM_LAYOUT || layoutMode == SPAM_NUMBER_LAYOUT)
{
Log.d("fillData", "0");
SpamListAdapter slaNumber = new SpamListAdapter(this, R.layout.spamlist, mNumberlist);
mList.setAdapter(slaNumber);
}else
{
Log.d("fillData", "1");
SpamListAdapter slaString = new SpamListAdapter(this, R.layout.spamlist, mStringlist);
mList.setAdapter(slaString);
}
}
여기까지는 정상적으로 동작하는 것같은데요.
public class SpamListAdapter extends ArrayAdapter{
final static String TAG = "SpamListAdapter";
SpamDialog spamNumber = null;
ArrayList<String> arrNumberList = null;
public SpamListAdapter(SpamDialog spamNumber, int spamlist, ArrayList arrNumberList) {
super(spamNumber, spamlist, arrNumberList);
Log.d(TAG, "SpamListAdapter()" );
this.spamNumber = spamNumber;
this.arrNumberList = arrNumberList;
Log.d(TAG, "spamNumber :" +spamNumber);
Log.d(TAG, "arrNumberList :"+arrNumberList );
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if(v==null){
LayoutInflater vi = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.spamlist, null);
}
String numberList = arrNumberList.get(position);
Log.d(TAG, "getView() : "+numberList);
Log.d(TAG, "getView() : "+arrNumberList.size());
if(numberList != null && !"".equals(numberList)){
LinearLayout listRow1 = (LinearLayout)v.findViewById(R.id.listRow1);
LinearLayout listRow2 = (LinearLayout)v.findViewById(R.id.listRow2);
TextView spamNumber = new TextView(getContext());
ImageView xButton = new ImageView(getContext());
spamNumber.setWidth(200);
xButton.setImageResource(R.drawable.btn_spam_dialog_x_button);
xButton.setId(position);
setListOnTouchListener(xButton);
spamNumber.setText(numberList);
spamNumber.setTextSize(20);
spamNumber.setTextColor(0xffffffff);
listRow1.addView(spamNumber);
listRow2.addView(xButton);
}
return v;
}
private void setListOnTouchListener(View v)
{
v.setOnTouchListener(new OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event)
{
int action = event.getAction();
int id = v.getId();
if(action == MotionEvent.ACTION_DOWN){
remove(id);
arrNumberList.remove(id);
}
return false;
}
});
}
}
이 어댑터 부분이 문제인것 같은데. 고수님들 알려주세요 ㅠ..ㅠ