ฉันมี ListView
พร้อมอะแดปเตอร์แบบกำหนดเอง และมันแสดงรายการ wifi รอบตัวฉัน เมื่อคลิกรายการใดรายการหนึ่ง ฉันจะแสดงกล่องโต้ตอบพร้อมรายละเอียด กล่องโต้ตอบเป็นคลาสที่กำหนดเองที่ได้มาจาก DialogFragment
และแสดงโดยใช้รหัสนี้หลังจากการสแกน Wifi เสร็จสิ้น:
private class WifiScanReceiver extends BroadcastReceiver {
public void onReceive(Context c, Intent intent) {
List<ScanResult> wifiScanList = wifi.getScanResults();
Log.i("WifiAnal", "rec");
lv.setAdapter(new WifiListAdapter(getApplicationContext(), R.layout.itemlistrow, wifiScanList));
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
ScanResult listItem = (ScanResult)lv.getItemAtPosition(position);
WifiDetailsDialogFragment d = new WifiDetailsDialogFragment();
// Supply num input as an argument.
Bundle args = new Bundle();
args.putString("ssid", listItem.SSID);
d.setArguments(args);
d.show(getSupportFragmentManager(), "fir");
// TODO: PUT ASYNC CALL HERE AND PROCESS FETCHED DATA.
// TODO: SHOW ASYNC RESULT ON OPEN DIALOG
}
});
mSwipeRefreshLayout.setRefreshing(false);
}
}
คลาส WifiDetailsDialogFragment
ของฉันดูแลการขยายเค้าโครง xml และแสดงอย่างถูกต้องที่ด้านบนของแอปด้วยปุ่มตกลง
ทีนี้ลองนึกภาพว่าฉันแสดงกล่องโต้ตอบและตอนนี้ฉันต้องการรันงานพื้นหลัง (เช่นดึงรายละเอียดเพิ่มเติมจากฐานข้อมูลบนเซิร์ฟเวอร์ภายนอก) และหลังจากที่ฉันทำเสร็จแล้ว หากกล่องโต้ตอบยังคงเปิดอยู่ ให้วางผลลัพธ์ลงในโครงร่าง (น่าจะจัดการค่าของบางรายการ) TextViews ที่มีอยู่แล้วและสูงเกินจริง) ถ้าปิดแล้วไม่ต้องทำอะไรเลย
ฉันจะเข้าถึงวิดเจ็ตเลย์เอาต์ของฉันจากกระบวนการที่ทำงานในพื้นหลังที่เริ่มต้นโดย onItemClick ได้อย่างไร ฉันพยายาม d.getView()
แต่สิ่งนี้ส่งคืน null
วิธีที่ถูกต้องคือผ่าน FragmentManager
หรือไม่ ฉันไม่ต้องการวาดบทสนทนาใหม่ แต่ต้องการแก้ไขสมาชิกที่มีอยู่
ขอบคุณ!