솔루션을 검색 한 결과 해결책을 찾지 못했습니다.ListView onItemClick이 사용자 지정 어댑터와 작동하지 않습니다.
각 항목에 TextView와 HorizontalScrollView가있는 ListView를 사용하고 있습니다. HorizontalScrollView는 런타임에 몇 가지 TextViews로 채워집니다. 사용자가이 TextView 중 하나를 클릭하면 뷰의 배경이 토글되며 TextView 클래스가 확장됩니다.
문제는 ListView onItemClick이 실행되지 않는다는 것입니다. 나는 약간의 코드로 놀았고, 이유를 들어 이해할 수없는 경우 클릭 이벤트가 발생하지만 가끔씩 각 목록 항목 사이를 클릭 할 때만 발생합니다. 내 TextView가 클릭 이벤트를 처리하거나 레이아웃 중 하나가 이벤트를 방해하고 있기 때문에 그 중 하나라고 생각합니다.
편집 :
난 할 노력하고있어 것은 :
텍스트 뷰를 클릭 할 때, 그것은 몇 가지 시각 효과를 전환.
데이터 구조에 값 (텍스트)을 추가하십시오.
사용자 정의 TextView는 클릭 이벤트를 잘 처리하지만 어댑터에서 해당 클릭 이벤트를 가져올 수 없습니다. ListView에서 위치를 알아야하기 때문에 필요합니다.
public class KeywordListAdapter extends ArrayAdapter<String> implements OnClickListener {
private final Context context;
private final String[] values;
private AspectManager aspectManager;
static class ViewHolder {
protected TextView aspectName;
protected HorizontalScrollView horizContainer;
protected LinearLayout keyWrapper;
protected KeywordTextView[] keyword;
}
public KeywordListAdapter(Context context, String[] values) {
super(context, R.layout.aspect_list_answer, values);
this.context = context;
this.values = values;
aspectManager = AspectManager.getInstance();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Aspect aspect = aspectManager.getAspectByName(values[position]);
View row = convertView;
// reuse views
if (row == null) {
Log.w(Constants.TAG, "row == null");
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.aspect_list_answer, parent, false);
ViewHolder viewHolder = new ViewHolder();
viewHolder.horizContainer = (HorizontalScrollView) row.findViewById(R.id.horizontalRow);
viewHolder.horizContainer.setHorizontalScrollBarEnabled(false);
viewHolder.keyWrapper = new LinearLayout(context);
viewHolder.keyWrapper.setOrientation(LinearLayout.HORIZONTAL);
viewHolder.keyWrapper.setId(0);
viewHolder.keyword = new KeywordTextView[aspect.getKeywordCount()];
viewHolder.aspectName = (TextView) row.findViewById(R.id.lblAspect);
String[] keywords = aspect.getAspectKeys();
for (int i=0; i< keywords.length; i++){
viewHolder.keyword[i] = new KeywordTextView(context);
viewHolder.keyword[i].setOnClickListener(this);
viewHolder.keyWrapper.addView(viewHolder.keyword[i]);
}
viewHolder.horizContainer.addView(viewHolder.keyWrapper);
row.setTag(viewHolder);
}
//Set values
ViewHolder holder = (ViewHolder) row.getTag();
//Fill aspect name
holder.aspectName.setText(aspect.getAspectName());
holder.aspectName.setTextColor(Color.WHITE);
//Fill keywords
String[] keywords = aspect.getAspectKeys();
for (int i=0; i< keywords.length; i++){
holder.keyword[i].setKeyword(keywords[i]);
holder.keyword[i].setColor(baseColor);
//set keyword layout
LinearLayout.LayoutParams llp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
llp.gravity = Gravity.CENTER_VERTICAL;
llp.setMargins(20, 15, 20, 20);
holder.keyword[i].setLayoutParams(llp);
}
return row;
}
@Override
public void onClick(View v) {
((KeywordTextView)v).toggle();
}
public class KeywordTextView extends TextView {
String keyword;
String color;
boolean selected;
private GradientDrawable gd;
public KeywordTextView(Context context) {
super(context);
gd = new GradientDrawable();
selected = false;
}
public void setKeyword(String keyword){
this.keyword = keyword;
setText(keyword);
}
public String getKeyword(){
return keyword;
}
public void setColor(String color){
this.color = color;
setText(keyword);
}
public boolean isKeywordSelected(){
return this.selected;
}
protected void onDraw (Canvas canvas) {
super.onDraw(canvas);
//Set style
...
}
protected void toggle(){
selected = !selected;
}
}
} 활동의
와 관계있는 부분 :리스트 뷰의 내부 전경 상에 OnClickListener를 설정했기 때문에 당신이 발생하는 문제가
...
aspectList = (ListView)findViewById(R.id.lvAspectList);
aspectList.setAdapter(new KeywordListAdapter(this, aspects.split(", ")));
aspectList.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
Log.w(TAG, "aspectList onItemClick");
}
});
...
List 항목에 포커스를 가져 오는 onClick 수신기가 있기 때문에 정상적으로 작동한다고 생각합니다. 그래도 틀릴 수 있습니다. – zgc7009
은 aspect_list_answer.xml 코드를 표시합니다. –