java - ArrayList और ListView के साथ एंड्रॉइड ऐरे एडेप्टर अद्यतन नहीं करते जब सरणी सूची बदल जाती है




android android-activity (2)

मेरे पास एक एंड्रॉइड ऐप है जिसमें स्क्रीन के साथ एक सूचीदृश्य है, जो मैं उपकरणों की एक सूची प्रदर्शित करने के लिए उपयोग कर रहा हूं। ये डिवाइस एक सरणी में आयोजित किए जाते हैं

मैं सूची में स्क्रीन पर सरणी में प्रदर्शित करने के लिए ArrayAdapter का उपयोग करने की कोशिश कर रहा हूं।

यह पहले काम करता है जब मैं SetupActivity वर्ग को लोड करता है, हालांकि, addDevice () विधि में एक नया उपकरण जोड़ने की सुविधा है, जिसका मतलब है कि उपकरणों को बनाए रखने वाले एआरआर को अद्यतन किया गया है।

मैं NotifyDataSetChanged () का उपयोग कर रहा हूं जो कि सूची को अपडेट करने के लिए माना जाता है लेकिन यह काम करने के लिए प्रतीत नहीं होता

public class SetupActivity extends Activity
{   
    private ArrayList<Device> deviceList;

    private ArrayAdapter<Device> arrayAdapter;

    private ListView listView;

    private DevicesAdapter devicesAdapter;

    private Context context;

    public void onCreate(Bundle savedInstanceState)  //Method run when the activity is created
    {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.setup);  //Set the layout

        context = getApplicationContext();  //Get the screen

        listView = (ListView)findViewById(R.id.listView);

        deviceList = new ArrayList<Device>();

        deviceList = populateDeviceList();  //Get all the devices into the list

        arrayAdapter = new ArrayAdapter<Device>(this, android.R.layout.simple_list_item_1, deviceList);

        listView.setAdapter(arrayAdapter);  
    }

    protected void addDevice()  //Add device Method (Simplified)
    {
        deviceList = createNewDeviceList();    //Add device to the list and returns an updated list

        arrayAdapter.notifyDataSetChanged();    //Update the list
}
}

क्या कोई देख सकता है कि मैं गलत कहां जा रहा हूं?


आपकी विधि addDevice एक अंतहीन लूप पैदा कर रहा है। अपने आप से एक विधि कॉल मत करो जैसे आप यहाँ कर रहे हैं:

deviceList = addDevice();

एरे एडैप्टर के लिए, सूचना देंडेटासेट चेंजेड केवल तभी काम करता है यदि आप अडैप्टर पर फ़ंक्शन add , insert , remove , और clear करें का उपयोग करते add

  1. एडेप्टर साफ़ करने के लिए स्पष्ट उपयोग करें - arrayAdapter.clear()
  2. Adapter.add का उपयोग करें और नई गठित सूची जोड़ें - arrayAdapter.add(deviceList)
  3. कॉल अधिसूचनाडेटासेट बदल दिया गया

विकल्प:

  1. नए कदमों के बाद इस कदम को दोहराएं - लेकिन यह अनावश्यक है

    arrayAdapter = new ArrayAdapter<Device>(this, android.R.layout.simple_list_item_1, deviceList);
  2. बेस एडेप्टर और लिस्ट एडेप्टर से प्राप्त अपनी खुद की क्लास बनाएं जो आपको अधिक लचीलापन प्रदान करता है। यह सबसे अधिक अनुशंसित है




android-arrayadapter