1
내 목록보기에 대한 사용자 지정 어댑터를 만듭니다. getView
메서드에서 사용자 지정 어댑터에 LinearLayout
에 대해 onTouchListener
을 설정했습니다. 웬일인지, 나의리스트 뷰의 onItemClickListener
는 이것 때문에 달릴 수 없다. 이 내 코드는 내 사용자 지정 어댑터 TransactionAdapter
방법 :어댑터 ListView의 onTouchListener가 실행되지 않는 onItemClickListener 만들기
public class TransactionAdapter extends BaseAdapter {
private LayoutInflater inflater;
private ArrayList<CTransaction> transactions;
public TransactionAdapter(Context context, ArrayList<CTransaction> transactions){
inflater = LayoutInflater.from(context);
this.transactions = transactions;
}
@Override
public int getCount() {
return transactions.size();
}
@Override
public Object getItem(int position) {
return transactions.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final View view = convertView = inflater.inflate(R.layout.detail_transaction, parent, false);
LinearLayout llBackground = (LinearLayout)convertView.findViewById(R.id.llBackground);
llBackground.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
v.setBackground(view.getResources().getDrawable(R.drawable.border_clicked));
break;
case MotionEvent.ACTION_UP:
v.setBackground(view.getResources().getDrawable(R.drawable.border));
v.performClick();
break;
case MotionEvent.ACTION_CANCEL:
v.setBackground(view.getResources().getDrawable(R.drawable.border));
break;
}
//Tried to use this but not working
view.onTouchEvent(event);
return true;
}
});
return convertView;
}
}
그리고 이것은 ListView에 대한 내 setAdapter
및 onItemClickListener
입니다 : 당신이 터치 이벤트를 전파 false를 반환해야한다
lvTransaction = (ListView)findViewById(R.id.lvTransaction);
TransactionAdapter adapter = new TransactionAdapter(this, transactions);
lvTransaction.setAdapter(adapter);
lvTransaction.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
final int positionSelected = position;
AlertDialog.Builder ad = new AlertDialog.Builder(HistoryActivity.this);
//Show the AlertDialog
}
});
그럼 논리를 다시 생각해 봅시다. onTouchListener를 LinearLayout으로 설정하면 목록 뷰가 있다고 생각합니다. 왜 onItemClickListener가 작동하지 않는지 궁금합니다. 나는 당신이 (LinearLayout) 루트 요소에 onTouchListener를 설정하고 listview에 영향을 미치기 때문에 그것을 믿는다. –
전체 코드를 제공하지 않아서 죄송합니다. 선형 레이아웃은 맞춤 어댑터 레이아웃이며 내 목록보기가있는 레이아웃이 아닙니다. – Kuro13
그래서 왜 선형 레이아웃 배경을 변경하려면 listview에 touchlistener를 사용하지 않습니까? –