मेरे पास हैश मैप है, मैं इसे सूची दृश्य में कैसे रख सकता हूं? किस एडाप्टर का उपयोग करने की आवश्यकता है?सूची दृश्य में हैश मैप
public void showCinemas(HashMap<String, String> cinemas)
{
...//What?
list.setAdapter(adapter);
}
मेरे पास हैश मैप है, मैं इसे सूची दृश्य में कैसे रख सकता हूं? किस एडाप्टर का उपयोग करने की आवश्यकता है?सूची दृश्य में हैश मैप
public void showCinemas(HashMap<String, String> cinemas)
{
...//What?
list.setAdapter(adapter);
}
सरल एडाप्टर वर्ग बनाओ:
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(android.R.id.text1)).setText(item.getKey());
((TextView) result.findViewById(android.R.id.text2)).setText(item.getValue());
return result;
}
}
लेआउट/my_adapter_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
<TextView
android:id="@android:id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TextView
android:id="@android:id/text2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
आपका कोड:
public void showCinemas(HashMap<String, String> cinemas) {
MyAdapter adapter = new MyAdapter(cinemas);
list.setAdapter(adapter);
}
इसकी निष्पक्ष सरल:
सूची आइटम आप उदाहरण के लिए, बनाने के लिए जा रहे हैं के लिए। कहते हैं कि तुम नाम की तरह सूची आइटम में विद्यार्थी का रिकॉर्ड रख दिया और को संबोधित
private HashMap<String,Object> prepareListViewItems(Student[] student)
{
ArrayList<HashMap<String,Object>> listdata = new ArrayList<HashMap<String,Object>>();
for(int index=0;index<student.size();index++)
{
HashMap<String,Object> data = new HashMap<String,Object>();
data.put("roll", student[indxe].roll);
data.put("address", student[indxe].address);
data=null;
listdata.add(data);
}
return data;
}
private void setListAdapter(Student[] students)
{
TestListAdapter adapter = new TestListAdapter(prepareListViewItems(students))
list.setAdapter(adapter);
}
लेकिन, जब आप एक कस्टम एडाप्टर पैदा कर रहे हैं, वहाँ hashmap बनाने के लिए कोई जरूरत नहीं है करने के लिए है, केवल सरणी अपने उद्देश्य के लिए पर्याप्त होगा।
वह '' 'ListView''' में कुंजी-मान पेयर दिखाने की जरूरत है, तो' '' की ArrayList''' '' 'HashMap''' –
मदद नहीं करेगा आप' सेट करते हैं डेटा = बातिल; ** ** सूची से डेटा जोड़ने से पहले ** **, आप हमेशा सूचीडेटा में शून्य जोड़ रहे हैं। क्या मै गलत हु? –
आपका क्या मतलब है "केवल सरणी पर्याप्त होगी"? बकवास। नीचे पूरा जवाब देखें। इस मामले में मैं अपना खुद का हैशप बनाए रखता हूं लेकिन कोई सरणी की आवश्यकता नहीं होती है। – RichieHH
हैश मैप 2 संग्रह (या बेहतर 1 संग्रह और 1 सेट) से बना है, इसलिए यह ArrayAdapter को विस्तारित करना वास्तव में संभव नहीं है; लेकिन आप आसानी से (या बेहतर एक सेट) Map.Entry का एक संग्रह प्राप्त कर सकते हैं, और यह एक सूची में कन्वर्ट:
से:
Map<String, Object> map = new HashMap<String, Object>();
रहे हैं:
List<Map.Entry<String, Object>> list = new ArrayList(map.entrySet());
तो मैं का उपयोग इस तरह एक व्युत्पन्न ArrayAdapter:
class HashMapArrayAdapter extends ArrayAdapter {
private static class ViewHolder {
TextView tV1;
TextView tV2;
}
public HashMapArrayAdapter(Context context, int textViewResourceId, List<Map.Entry<String, Object>> objects) {
super(context, textViewResourceId, objects);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(android.R.layout.simple_list_item_2, parent, false);
viewHolder = new ViewHolder();
viewHolder.tV1 = (TextView) convertView.findViewById(android.R.id.text1);
viewHolder.tV2 = (TextView) convertView.findViewById(android.R.id.text2);
convertView.setTag(viewHolder);
} else
viewHolder = (ViewHolder) convertView.getTag();
Map.Entry<String, Object> entry = (Map.Entry<String, Object>) this.getItem(position);
viewHolder.tV1.setText(entry.getKey());
viewHolder.tV2.setText(entry.getValue().toString());
return convertView;
}
और फिर एडाप्टर बनाने के लिए:
ArrayAdapter adapter = new HashMapArrayAdapter(this.getActivity(), android.R.layout.simple_list_item_2, new ArrayList(map.entrySet()));
ग्रेट !! मैं एक जेसन से टीवी चैनलों की एक सूची खींच रहा हूं: छवि, नाम और संख्या। छवियों को स्वयं निहित छवि डाउनलोडर वर्ग के साथ प्राप्त यूआरएल का उपयोग करके लोड किया जाता है। यदि आपको इसकी आवश्यकता हो सकती है तो मुझे बताएं, आईडी साझा करने में खुशी होगी। – Josh
यह प्रविष्टिसेट के बजाय मूल्य() नहीं होना चाहिए? – cafebabe1991
इसके लिए OnItemClickListener को कैसे संभालें? – Madhan