Yang ini membuat saya bingung.
Saya perlu memanggil metode aktivitas dari dalam kelas tata letak khusus. Masalahnya adalah saya tidak tahu cara mengakses aktivitas dari dalam tata letak.
ProfileView
public class ProfileView extends LinearLayout
{
TextView profileTitleTextView;
ImageView profileScreenImageButton;
boolean isEmpty;
ProfileData data;
String name;
public ProfileView(Context context, AttributeSet attrs, String name, final ProfileData profileData)
{
super(context, attrs);
......
......
}
//Heres where things get complicated
public void onClick(View v)
{
//Need to get the parent activity and call its method.
ProfileActivity x = (ProfileActivity) context;
x.activityMethod();
}
}
ProfileActivity
public class ProfileActivityActivity extends Activity
{
//In here I am creating multiple ProfileViews and adding them to the activity dynamically.
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.profile_activity_main);
}
public void addProfilesToThisView()
{
ProfileData tempPd = new tempPd(.....)
Context actvitiyContext = this.getApplicationContext();
//Profile view needs context, null, name and a profileData
ProfileView pv = new ProfileView(actvitiyContext, null, temp, tempPd);
profileLayout.addView(pv);
}
}
Seperti yang Anda lihat di atas, saya membuat profil profileView secara terprogram dan meneruskan activityContext dengannya. 2 pertanyaan:
- Apakah saya meneruskan konteks yang benar ke dalam Profileview?
- Bagaimana saya mendapatkan aktivitas yang mengandung dari konteks?
android
android-layout
android-activity
view
hierarchy
NADA TAMBAHAN
sumber
sumber
Ini adalah sesuatu yang saya telah berhasil digunakan untuk mengkonversi
Context
keActivity
ketika beroperasi di dalam UI dalam fragmen atau pandangan adat. Ini akan membongkar ContextWrapper secara rekursif atau mengembalikan nol jika gagal.sumber
Ada dua konteks berbeda di Android. Satu untuk aplikasi Anda (Sebut saja yang BESAR) dan satu untuk setiap tampilan (sebut saja konteks aktivitas).
LinearLayout adalah tampilan, jadi Anda harus memanggil konteks aktivitas. Untuk menyebutnya dari suatu kegiatan, cukup panggil "ini". Sangat mudah bukan?
Saat Anda menggunakan
Anda memanggil konteks BESAR, yang menggambarkan aplikasi Anda dan tidak dapat mengelola tampilan Anda.
Masalah besar dengan Android adalah bahwa konteks tidak dapat memanggil aktivitas Anda. Itu masalah besar untuk menghindari ini ketika seseorang memulai dengan pengembangan Android. Anda harus menemukan cara yang lebih baik untuk mengkodekan kelas Anda (atau mengganti "Konteks konteks" dengan "Aktivitas aktivitas" dan melemparkannya ke "Konteks" bila diperlukan).
Salam.
Hanya untuk memperbarui jawaban saya. Cara termudah untuk mendapatkan Anda
Activity context
adalah dengan menentukanstatic
contoh di AndaActivity
. Sebagai contohDan kemudian, di Anda
Task
,Dialog
,View
, Anda bisa menggunakan jenis yang kode untuk mendapatkan AndaActivity context
:sumber
R
). Orang-orang Google perlu memperkaya kosa kata mereka.Ini belum diuji dan saya mengkodekannya dengan benar. tetapi saya menyampaikan cara untuk mencapai apa yang Anda inginkan.
Pertama-tama buat dan Antarmuka
Dan terapkan ini untuk Kegiatan apa pun.
dan menyebutnya seperti
sumber
Context
. Seperti yang dinyatakan Nepster, praktik terbaik adalah meneruskan panggilan balik, sehingga setiap kali terjadi sesuatu yang menarik bagi orang tua, panggilan balik akan dipecat dengan data yang relevan.Konteks mungkin Aplikasi, Layanan, Kegiatan, dan banyak lagi.
Biasanya konteks Penayangan dalam Aktivitas adalah Aktivitas itu sendiri sehingga Anda mungkin berpikir Anda bisa langsung melemparkan Konteks ini ke Aktivitas tetapi sebenarnya Anda tidak selalu dapat melakukannya, karena konteksnya juga bisa menjadi ContextThemeWrapper dalam kasus ini.
ContextThemeWrapper banyak digunakan dalam versi terbaru dari AppCompat dan Android (berkat atribut android: theme dalam layout) jadi saya pribadi tidak akan pernah melakukan pemeran ini.
Jadi jawaban singkatnya adalah: Anda tidak dapat secara andal mengambil suatu Kegiatan dari suatu Konteks dalam Tampilan. Lewati Aktivitas ke tampilan dengan memanggil metode yang mengambil Kegiatan sebagai parameter.
sumber
Tidak pernah menggunakan getApplicationContext () dengan tampilan.
Itu harus selalu menjadi konteks aktivitas, karena pandangan melekat pada aktivitas. Selain itu, Anda mungkin memiliki set tema khusus, dan saat menggunakan konteks aplikasi, semua tema akan hilang. Baca lebih lanjut tentang berbagai versi konteks di sini .
sumber
Dan di Kotlin:
sumber
Suatu Kegiatan adalah spesialisasi dari Konteks, jadi, jika Anda memiliki suatu Konteks Anda sudah tahu aktivitas mana yang ingin Anda gunakan dan dapat dengan mudah memasukkan a ke dalam c ; di mana a adalah Kegiatan dan c adalah Konteks.
sumber
Saya menggunakan Aktivitas konversi
sumber
Metode ini harus membantu ..!
Saya harap ini membantu .. Selamat coding!
sumber
bagaimana dengan beberapa panggilan balik data langsung,
sumber