ListView
에 대해 Adapter
의 항목 목록을 보려면 HashMap
을 사용하고 싶습니다. ArrayAdapter<>
을 사용할 예정 이었지만 List<>
에서만 작동하므로이 작업을 수행 할 수 없습니다. 어떤 어댑터를 사용해야합니까?ListView에서 HashMap을 사용하려면 어떤 어댑터를 사용해야합니까
답변
: 당신이 다음 사용자 정의 어댑터를 만드는 어댑터에지도 기능을지도를 업데이트하거나 사용을 계획하는 경우,
Entry<MyKey, MyValue>[] entries =
map.entrySet().toArray(new Entry<MyKey, MyValue>[0]);
말했다되고 그것은 어려운 일이 아니다 및 것 훨씬 더 의미가 있습니다.
BaseAdapter의 하위 클래스로 시작하면 시작할 필요가 있습니다.이 서브 클래스를 사용하면 실행해야하는 몇 가지 어댑터 방법을 구현할 수 있습니다.
HashMap을 렌더링 할 사전 정의 된 어댑터가 없습니다. BaseAdapter를 확장하여 자신의 어댑터를 만드는 것이 좋습니다.
편집 :
이 다음과 같은 경고와 함께 제공public class HashMapAdapter extends BaseAdapter {
private HashMap<String, String> mData = new HashMap<String, String>();
private String[] mKeys;
public HashMapAdapter(HashMap<String, String> data){
mData = data;
mKeys = mData.keySet().toArray(new String[data.size()]);
}
@Override
public int getCount() {
return mData.size();
}
@Override
public Object getItem(int position) {
return mData.get(mKeys[position]);
}
@Override
public long getItemId(int arg0) {
return arg0;
}
@Override
public View getView(int pos, View convertView, ViewGroup parent) {
String key = mKeys[pos];
String Value = getItem(pos).toString();
//do your view stuff here
return convertView;
}
}
, 항목의 순서가 동일하게 보장 할 수 없습니다 : 그것은 함께 HashMap의 사용 추적 할 수없는 가망하고 BaseAdapter 확장, 여기 (안된) 예제 주문을 추가했습니다. 이 예를 쓰면 나를 알게되었습니다. 어댑터에서의 HashMap을 사용하지 마십시오 :
BaseAdapter가 ListAdapter를 구현하기 때문에 HashMap은 확장 된 BaseAdapter 클래스입니다. – Eugene
위의 예제를 추가 한 사람이 여전히 해결책을 찾고 있다면 – longhairedsi
, 나는 비슷한 질문에 대한 나의 대답을 확인한다 : http : // stackoverflow.co.kr/a/19467717/1891118 –
감사 응답 longhairedsi이 다음과 같은 경고와 함께 제공
를 들어, 항목의 순서는 당신이 그 (것)들을 추가 한 순서로 보장 할 수 없습니다. 이 예를 쓰면 나를 알게되었습니다. 어댑터에서 HashMap을 사용하지 마십시오.
이 문제를 해결하려면 대신 LinkedHashMap을 사용하십시오. 어댑터 파일
MyAdapter.java
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.Map;
public class MyAdapter extends BaseAdapter {
private final ArrayList mData;
public MyAdapter(Map<String, String> map) {
mData = new ArrayList();
mData.addAll(map.entrySet());
}
@Override
public int getCount() {
return mData.size();
}
@Override
public Map.Entry<String, String> getItem(int position) {
return (Map.Entry) mData.get(position);
}
@Override
public long getItemId(int position) {
// TODO implement you own logic with ID
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final View result;
if (convertView == null) {
result = LayoutInflater.from(parent.getContext()).inflate(R.layout.my_adapter_item, parent, false);
} else {
result = convertView;
}
Map.Entry<String, String> item = getItem(position);
// TODO replace findViewById by ViewHolder
((TextView) result.findViewById(R.id.text1)).setText(item.getKey());
((TextView) result.findViewById(R.id.text2)).setText(item.getValue());
return result;
}
}
전화
public void showCinemas(HashMap<String, String> cinemas) {
MyAdapter adapter = new MyAdapter(cinemas);
list.setAdapter(adapter);
}
, 키의 형태에 적용 할 경우 , 당신은 항상 그들 자신의 ArrayList에 정렬을 추가 할 수 있습니다. 그것은 Collections.sort를 사용하고 그것을 참조 점으로 사용합니다. 당신이 할 수있는 일
private ArrayList<String> mKeys = new ArrayList<>();
for (String aKey :data.keySet()){
mKeys.add(aKey);
}
Collections.sort(mKeys);
가 사전에 질서를 유지하기 위해이 어댑터에서
public class HashMapAdapter extends BaseAdapter {
private LinkedHashMap<String, String> mData = new LinkedHashMap<String, String>();
private String[] mKeys;
public HashMapAdapter(LinkedHashMap<String, String> data){
mData = data;
mKeys = mData.keySet().toArray(new String[data.size()]);
}
@Override
public int getCount() {
return mData.size();
}
@Override
public Object getItem(int position) {
return mData.get(mKeys[position]);
}
@Override
public long getItemId(int arg0) {
return arg0;
}
@Override
public View getView(int pos, View convertView, ViewGroup parent) {
String key = mKeys[pos];
String Value = getItem(pos).toString();
//do your view stuff here
return convertView;
}
}
는 이럴 사용자 지정 어댑터에 그 목록을 통과 한 다음 추가하려는 해시 맵의 그들은 키 값에 대한 새로운 목록을 생성하고있다. 그런 다음 어댑터에서 HashMap 컬렉션을 가져오고 HashMap.get(key);
을 참조 키 목록에서 사용하십시오.
- 1. 테이블 어댑터를 사용해야합니까?
- 2. ActiveMQ에서 언제 JDBC 지속성 어댑터를 사용해야합니까?
- 3. 어떤 정규식을 사용해야합니까?
- 4. GAE에서 REST를 사용하려면 어떤 구현을 사용해야합니까? (RESTlet, jersey, other ....)
- 5. listview에서 사진 슬라이드 쇼를 사용하려면 어떻게해야합니까?
- 6. 사용자 지정 어댑터를 사용하여 ListView에서 항목의 여백을 설정할 수 없습니다.
- 7. 편리한 방법을 사용하려면 왜 사용해야합니까?
- 8. WCF 서비스를 사용하려면 프록시를 사용해야합니까?
- 9. 어떤 gcc 버전을 사용해야합니까?
- 10. qt4에 어떤 원자로를 사용해야합니까?
- 11. 어떤 소스 컨트롤을 사용해야합니까?
- 12. 어떤 CMS를 사용해야합니까?
- 13. 어떤 컬렉션 클래스를 사용해야합니까?
- 14. 어떤 xml 파서를 사용해야합니까?
- 15. 어떤 뷰 클래스를 사용해야합니까?
- 16. 어떤 캐싱 방법을 사용해야합니까?
- 17. 어떤 데이터 구조를 사용해야합니까?
- 18. 어떤 버전의 flexmojos를 사용해야합니까?
- 19. 어떤 OSS 라이센스를 사용해야합니까?
- 20. 어떤 구성 요소를 사용해야합니까?
- 21. Joomla에 어떤 포럼을 사용해야합니까?
- 22. 어떤 PageRank 공식을 사용해야합니까?
- 23. AlertDialog.Builder는 어떤 컨텍스트를 사용해야합니까?
- 24. 어떤 압축/암호화를 사용해야합니까?
- 25. 어떤 유형의 암호화를 사용해야합니까?
- 26. mysql --- 어떤 유형을 사용해야합니까?
- 27. 어떤 이벤트를 사용해야합니까?
- 28. 어떤 버전의 Xcode를 사용해야합니까?
- 29. 어떤 형식의 png를 사용해야합니까?
- 30. 어떤 mysqli 함수를 사용해야합니까?
어떻게' Map.Entry'예외의 일반적인 배열을 만들 수 없습니까? –