2013-08-01 4 views
0

큰 응용 프로그램을 만들고 있는데, 대부분 3 개의 활동과 ListView 구성 요소로 이루어져 있습니다.활동 목록보기 - android

MainActivity -> FirstActivity 다시

MainActivity -> SecondActivty 다시

은 세 가지가 특정 목록보기 항목을 나열 내부의 ListView 구성 요소를 가지고있다.

나는 모든 속성 내부 기계의 메인 활동이 작성 될 때, 그들 중 일부는 계산을 보유하고 MyMachine을라는 싱글 클래스가 있습니다.

은 내가 여기을 달성하고자하는 목록 주 제 1 및 제 2 활동의 시스템의 모든 관련 속성입니다. 그것의 3 개의 그룹에서 동일한 것의 속성을 분류하는 것.

내가 직면 한 문제는 : 나는 각각의 ListView 항목에 클릭 이벤트를 원하는

. 하지만 Listener는 ListView 항목의 정수 키를 제공합니다. 이는 컴퓨터의 모든 속성이 특정 정수 키와 매핑되어야 함을 의미합니다. 그러나 FirstActivity의 항목 1이 주 활동의 항목 0 인 경우 클릭하면 잘못된 값이 인쇄됩니다.

더 좋은 방법이 있나요?

기본적으로 문자열 값을 매핑하고 모든 활동에서 ListView 항목을 클릭하면 대화 상자 창에 올바르게 표시하는 방법을 설명합니다. 나는이 특정 목적을 위해 기능을 개발할 수 있지만, 더 간단한 방법 :이

답변

1
Adapter 사용 ListView 쇼 데이터 ( BaseAdapter, SimpleAdapter 또는 ArrayAdapter 같은 구현 중 하나 보통 사용되는)

.

Adapter 클래스에는 표시 할 항목에 대한 참조가 들어 있으며 또한 getItemId(int position)이라는 특별한 메서드가 있습니다.이 메서드는 ListView의 위치에있는 항목의 ID를 반환해야합니다.

| _id | name | price | 
|-----|------|-------| 
| 1 | abcd | 123 | 
| 2 | efgh | 456 | 

그런 다음 우리가 ListViewProperty 항목 집합을 표시하는 ArrayAdpater을 사용할 수 있습니다 : 일부 데이터베이스 레코드에 매핑

public class Property{ 
    public final long id; 
    public final String name; 
    public final long price; 

    public Property(long id, String name, long price){ 
    this.id = id; 
    this.name = name; 
    this.price = price; 
    } 
} 

:

그래서, 우리는 오전 항목 클래스가 있다고 할 수 있습니다 :

public class PropertyAdapter extends ArrayAdapter<Property>{ 

    public PropertyAdapter(Context context, int textViewResourceId) { 
     super(context, textViewResourceId); 
    } 

    @Override 
    public long getItemId(int position) { 
     return getItem(position).id; 
    } 

} 

그리고 아이템 d :

+0

SimpleAdapter를 사용하지만 getItemId()는 int가 아니라 long을 반환합니다. 그리고 itemId와 어떻게해야할까요? 다음에 :) 좋습니다. 정수가 아닌 Long으로 매핑 할 것입니다. – Vlad

+0

@Vlad이 클래스는 데이터베이스와 함께 작동하도록 설계되었으므로 ID가 길 수 있습니다.이것은 3 개의 모든 활동 목록보기에서이 패턴을 따르는 경우 목록보기에서 항목이 정렬되는 방법과 관계없이 데이터베이스에서 '항목 ID'와 동일합니다. –

+0

이것이 어떻게 도움이되는지 잘 모르겠습니다. 클릭 된 목록 항목의 색인을 제공하는 onItemClick 함수의 세 번째 매개 변수를 사용하는 것과 동일한 작업입니다. 내가 생각할 수있는 유일한 것은 Object item = adapterView.getItemAtPosition (i); 그런 다음 항목 객체를 구문 분석하고 내 HashMap 에서 검색하십시오. 또는 나는 이해하지 않는다. – Vlad