ฉันพยายามที่จะใช้วิธีAndroid Application
การของฉันnotifyDataSetChanged()
สำหรับArrayAdapter
แต่มันไม่ทำงาน
ฉันพบว่าเป็นคำตอบที่นี่ที่notifyDataSetChanged()
ควรทำงานในเธรดหลัก แต่ไม่มีตัวอย่างสำหรับที่
ใครช่วยส่งตัวอย่างหรืออย่างน้อยลิงค์?!
ฉันพยายามที่จะใช้วิธีAndroid Application
การของฉันnotifyDataSetChanged()
สำหรับArrayAdapter
แต่มันไม่ทำงาน
ฉันพบว่าเป็นคำตอบที่นี่ที่notifyDataSetChanged()
ควรทำงานในเธรดหลัก แต่ไม่มีตัวอย่างสำหรับที่
ใครช่วยส่งตัวอย่างหรืออย่างน้อยลิงค์?!
คำตอบ:
สำหรับArrayAdapter
, notifyDataSetChanged
ทำงานเฉพาะถ้าคุณใช้add()
, insert()
, remove()
และclear()
บนอะแดปเตอร์
เมื่อArrayAdapter
มีการก่อสร้างก็ถืออ้างอิงสำหรับการList
ที่ถูกส่งผ่านใน. หากคุณกำลังจะผ่านในList
ที่เป็นสมาชิกของกิจกรรมและการเปลี่ยนแปลงสมาชิกกิจกรรมที่ต่อมาจะยังคงถืออ้างอิงไปที่เดิมArrayAdapter
List
อะแดปเตอร์ไม่ทราบว่าคุณได้เปลี่ยนแปลงList
กิจกรรม
ทางเลือกของคุณคือ:
ArrayAdapter
การปรับเปลี่ยนรายการพื้นฐาน ( add()
, insert()
, remove()
, clear()
ฯลฯ )ArrayAdapter
ใหม่List
ด้วยข้อมูลใหม่ (ใช้ทรัพยากรจำนวนมากและการรวบรวมขยะ)BaseAdapter
และListAdapter
ที่อนุญาตให้เปลี่ยนList
โครงสร้างข้อมูลพื้นฐานnotifyDataSetChanged()
ทุกครั้งที่มีการอัพเดตรายการ จะเรียกมันว่าใน UI-กระทู้ใช้ของrunOnUiThread()
Activity
จากนั้นnotifyDataSetChanged()
จะทำงานnotifyDataSetChanged()
ในลักษณะดังกล่าว((BaseAdapter) arrayAdapter).notifyDataSetChanged();
?
คุณสามารถใช้runOnUiThread()
วิธีการดังต่อไปนี้ หากคุณไม่ได้ใช้เพียงแค่ปรับตัวเข้ากับรหัสที่จะได้รับการอ้างอิงถึงคุณListActivity
ArrayAdapter
final ArrayAdapter adapter = ((ArrayAdapter)getListAdapter());
runOnUiThread(new Runnable() {
public void run() {
adapter.notifyDataSetChanged();
}
});
ฉันเพิ่งเขียนในหัวข้อนี้แม้ว่าโพสต์นี้จะเก่าฉันคิดว่ามันจะเป็นประโยชน์กับคนที่ต้องการทราบวิธีการใช้BaseAdapter.notifyDataSetChanged()
ขั้นตอนและในวิธีที่ถูกต้อง
โปรดปฏิบัติตามวิธีการใช้อย่างถูกต้อง BaseAdapter.notifyDataSetChanged () ใน Androidหรือบล็อกใหม่ BaseAdapter.notifyDataSetChanged ()
mItem.add()
ทำฉันแก้ไขเพียงหนึ่งองค์ประกอบหมายความว่าmItem.get(position).setImage(encodedImage)
อาจเป็นเพราะเหตุใดจึงให้ข้อผิดพลาด NullPointer exeption.So ไม่ทำงานแจ้งเตือน DataSetChange ทำงานเพียงแก้ไขมัน bcz สำหรับอะแดปเตอร์ Array มันดังกล่าวข้างต้นมันทำงาน เฉพาะสำหรับการเพิ่ม (), ล้าง (), ลบ () ฯลฯ
ฉันมีปัญหาเดียวกันและฉันไม่ต้องการแทนที่ ArrayAdapter ทั้งหมดด้วยอินสแตนซ์ใหม่อย่างต่อเนื่อง ดังนั้นฉันจึงมี AdapterHelper ทำการยกของหนักที่อื่น
เพิ่มที่นี่ตามปกติที่คุณต้องการ (ลอง) โทรแจ้งเตือน
new AdapterHelper().update((ArrayAdapter)adapter, new ArrayList<Object>(yourArrayList));
adapter.notifyDataSetChanged();
คลาส AdapterHelper
public class AdapterHelper {
@SuppressWarnings({ "rawtypes", "unchecked" })
public void update(ArrayAdapter arrayAdapter, ArrayList<Object> listOfObject){
arrayAdapter.clear();
for (Object object : listOfObject){
arrayAdapter.add(object);
}
}
}
super.addAll(..)
สำหรับ API> 11 และ super.add (.. ) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { super.addAll(items); } else { for (Object o : collection) { super.add(o); } }
ร่วมกับการทำซ้ำเช่นคุณ: ตอนนี้เพิ่งขยายจากคลาสอะแดปเตอร์ใหม่ของคุณ
ฉันรู้ว่านี่เป็นการตอบสนองช้า แต่ฉันกำลังเผชิญปัญหาที่คล้ายกันและฉันจัดการเพื่อแก้ปัญหาโดยใช้notifyDataSetChanged()
ในสถานที่ที่เหมาะสม
ดังนั้นสถานการณ์ของฉันเป็นดังนี้
ฉันต้องอัปเดตมุมมองในแท็บแถบการกระทำ (ส่วน) ด้วยเนื้อหาที่ส่งคืนจากกิจกรรมที่แตกต่างอย่างสิ้นเชิง อย่างไรก็ตามในขั้นต้น listview จะไม่แสดงการเปลี่ยนแปลงใด ๆ อย่างไรก็ตามเมื่อฉันคลิกที่แท็บอื่นแล้วกลับไปที่แท็บที่ต้องการ listview จะถูกอัพเดตด้วยเนื้อหาที่ถูกต้องจากกิจกรรมอื่น ดังนั้นเพื่อแก้ปัญหานี้ฉันใช้notifyDataSetChanged()
อะแดปเตอร์แถบการกระทำในรหัสของกิจกรรมที่ต้องส่งคืนข้อมูล
นี่คือข้อมูลโค้ดที่ฉันใช้ในกิจกรรม
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId())
{
case R.id.action_new_forward:
FragmentTab2.mListAdapter.notifyDataSetChanged();//this updates the adapter in my action bar tab
Intent ina = new Intent(getApplicationContext(), MainActivity.class);
ina.putExtra("stra", values1);
startActivity(ina);// This is the code to start the parent activity of my action bar tab(fragment).
}
}
กิจกรรมนี้จะกลับมาข้อมูลบางส่วนไปFragmentTab2
และมันโดยตรงจะ update ListView FragmentTab2
ของฉันใน
หวังว่าใครบางคนพบว่ามีประโยชน์นี้!