사용자 정의 ArrayAdapter로 작업하는 ListActivity에 이상한 문제가 있습니다. 목록 항목은 사용자 정의 된 getView를 통해 데이터에 바인드되며 텍스트 뷰와 버튼이 거의 포함되지 않습니다. 항목 버튼을 클릭하면 데이터 항목 ID가 포함 된 버튼이 눌린 태그에 따라 새 활동이 열립니다.ListActivity에서 사용자 정의 어댑터 버튼을 클릭 할 때 발생하는 문제
실제로는 특정 항목의 버튼을 클릭하면 실제로 다른 항목의 클릭을 클릭하거나 그렇게 보입니다. 정말 이상합니다. 마치 클릭 한 버튼이 다른 버튼에 포커스를 잃어 버린 것처럼 작동합니다. 대신 클릭 한 것입니다. 표준 버튼을 사용할 때 실제로 점프하는 목록 버튼에 중점을두고 어떤 종류의 혼란이 있음을 알 수 있습니다.
시나리오를 이해하지 못했지만 백그라운드에서 getView를 여러 번 호출 한 것과 관련이 있다고 생각합니다.
내 어댑터의 getView 구현의 그 :
내 목록 정의가 레이아웃의public View getView(int position, View convertView, ViewGroup parent)
{
View v = convertView;
Context context = App.getContext();
if (v == null)
{
// if the view is empty, init
v = mInflater.inflate(R.layout.list_item, null);
// add click listener to the item button
Button b = (Button)v.findViewById(R.id.b);
OnClickListener lsn = new OnClickListener()
{
@Override
public void onClick(View view)
{
// when clicked we want to open the new activity with the selected id
int id = Integer.parseInt(view.getTag().toString());
Intent i = new Intent(mActivityContext, otherActivity.class);
i.putExtra("ID", id);
mActivityContext.startActivity(i);
}
};
b.setOnClickListener(lsn);
}
ItemData currItem = m_Items.get(position);
// Some fields data bindings to currItem
Button btn = (Button)v.findViewById(R.id.b);
btn.setEnabled(currItem.isButtonEnabled);
btn.setTag(currItem.getID());
return v;
}
:
<ListView android:layout_width="fill_parent" android:id="@+id/android:list"
android:fadingEdge="none" android:divider="@color/transparent" android:dividerHeight="2dp"
android:background="@color/transparent" android:focusable="false"
android:cacheColorHint="@color/transparent" android:layout_height="fill_parent"></ListView>
어떤 생각? 감사합니다.
중요 업데이트 : 내가 잘못 클릭지고 어떤 항목에 어떤 일관성이 있음을 눈치 좀 더 테스트 후
. 그것은 항상 거울의 물건입니다. 즉 목록의 첫 번째 항목을 클릭 할 때 다른 항목이 표시되면 항상 마지막 항목입니다.
예 : 목록에 3 개의 항목이있는 경우 첫 번째와 마지막 부분은 서로를 참조하지만 중간 항목은 참조하지 않으며 중간 항목은 항상 예상대로 작동합니다. 마치 어딘가에 항목의 역순으로 다른 목록이 있습니다. 때로는 일반 색인어 대신 미러 색인을 얻습니다.
정말 이상합니다! 대부분 내가 뭔가 잘못하고있는 것 같지만 일어날 수있는 상황을 생각할 수 없습니다.
내가 클래스에 배열 어댑터를 변환 한는 ArrayList를 함께 baseAdapter를 확장하지만 문제가 계속 ...
마지막 업데이트 ... 그래서 나는이 문제가 경우에만 일어나는 것을까지 발견 notifyDatasetChanged가 백그라운드에서 실행 중입니다. 그러나 나는 단지 2 초마다 하나씩 호출을 줄일 수있다. 문제를 일으키는 것이 더 힘들지 만 그곳에는 아직 남아 있습니다 ...
어떤 단서?
배열의 개체 목록을 변경 한 후에 문제가 발생합니까? 그렇다면 listView를 새로 고쳤습니까? – Wizetux
두 개의 버튼이 참조되어 있다는 사실이 가장 혼란 스럽습니다. R.id.b에 의해 참조되는 click 이벤트를 발생시키는 버튼은 태그가 첨부 된 단추 (R.id.button에 의해 참조 됨)와 다른 단추입니다. 나는 활동이 적절한 id 값으로 어떻게 시작되는지를 보지 못했다! – Devunwired
ListActivity에 대한 전체 코드를 추가 할 수 있습니까? 이 문제는 getView 메소드가/setup이라고 불리는 방법에 달려 있습니다. – Bryan