Saya memiliki 2 fragmen dengan pada kedua fragmen sebuah tombol. Saat saya menekan tombol, saya ingin memulai Aktivitas baru. Tapi saya tidak bisa membuatnya bekerja.
Kesalahan yang saya dapatkan: ERROR di sini: Ketik mismatch: tidak dapat dikonversi dari mFragmentFavorite ke Fragment
Apa yang saya lakukan salah?
MyFragmentPagerAdapter
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
public class MyFragmentPagerAdapter extends FragmentPagerAdapter{
final int PAGE_COUNT = 3;
/** Constructor of the class */
public MyFragmentPagerAdapter(FragmentManager fm) {
super(fm);
}
/** This method will be invoked when a page is requested to create */
@Override
public Fragment getItem(int arg0) {
switch(arg0){
case 0:
return new FavoriteActivity();
//ERROR: Type mismatch: cannot convert from FavoriteActivity to Fragment
case 1:
return new SettingsActivity();
default:
return null;
}
}
/** Returns the number of pages */
@Override
public int getCount() {
return PAGE_COUNT;
}
}
FavouriteActivity
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
public class FavoriteActivity extends Activity{
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.main_favorite, container, false);
OnClickListener listnr=new OnClickListener() {
@Override
public void onClick(View v) {
Intent i= new Intent("aFavorite");
startActivity(i);
}
};
Button btn =(Button) v.findViewById(R.id.mainFavorite);
btn.setOnClickListener(listnr);
return v;
}
}
Jika FavouriteActivity memperluas fragmen, kesalahannya hilang tetapi saya mendapatkan kesalahan findViewById(R.id.mainFavorite);
dan kesalahannya hilang
Metode findViewById (int) tidak ditentukan untuk tipe FavoriteActivity
EDIT:
Ketika saya menekan tombol di fragmen untuk memulai aktivitas maka aplikasi macet ini adalah logcat saya
03-18 16:01:23.985: E/AndroidRuntime(1985): FATAL EXCEPTION: main
03-18 16:01:23.985: E/AndroidRuntime(1985): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=FavoriteActivityList }
03-18 16:01:23.985: E/AndroidRuntime(1985): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1569)
03-18 16:01:23.985: E/AndroidRuntime(1985): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1420)
03-18 16:01:23.985: E/AndroidRuntime(1985): at android.app.Activity.startActivityForResult(Activity.java:3446)
03-18 16:01:23.985: E/AndroidRuntime(1985): at android.app.Activity.startActivityForResult(Activity.java:3407)
03-18 16:01:23.985: E/AndroidRuntime(1985): at android.support.v4.app.FragmentActivity.startActivityFromFragment(FragmentActivity.java:826)
03-18 16:01:23.985: E/AndroidRuntime(1985): at android.support.v4.app.Fragment.startActivity(Fragment.java:838)
03-18 16:01:23.985: E/AndroidRuntime(1985): at com.example.spui.FavoriteActivity$1.onClick(FavoriteActivity.java:24)
03-18 16:01:23.985: E/AndroidRuntime(1985): at android.view.View.performClick(View.java:4211)
03-18 16:01:23.985: E/AndroidRuntime(1985): at android.view.View$PerformClick.run(View.java:17267)
03-18 16:01:23.985: E/AndroidRuntime(1985): at android.os.Handler.handleCallback(Handler.java:615)
03-18 16:01:23.985: E/AndroidRuntime(1985): at android.os.Handler.dispatchMessage(Handler.java:92)
03-18 16:01:23.985: E/AndroidRuntime(1985): at android.os.Looper.loop(Looper.java:137)
03-18 16:01:23.985: E/AndroidRuntime(1985): at android.app.ActivityThread.main(ActivityThread.java:4898)
03-18 16:01:23.985: E/AndroidRuntime(1985): at java.lang.reflect.Method.invokeNative(Native Method)
03-18 16:01:23.985: E/AndroidRuntime(1985): at java.lang.reflect.Method.invoke(Method.java:511)
03-18 16:01:23.985: E/AndroidRuntime(1985): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
03-18 16:01:23.985: E/AndroidRuntime(1985): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
03-18 16:01:23.985: E/AndroidRuntime(1985): at dalvik.system.NativeStart.main(Native Method)
Fragments
. Setidaknya tidak ada dalam kode yang Anda posting.Jawaban:
mFragmentFavorite
dalam kode Anda adaFragmentActivity
yang tidak sama dengan aFragment
. Itulah mengapa Anda mendapatkan jenis ketidakcocokan. Juga, Anda tidak harus memanggilnew
padaActivity
saat yang bukan cara yang tepat untuk memulai satu.Jika Anda ingin memulai contoh baru
mFragmentFavorite
, Anda dapat melakukannya melaluiIntent
.Dari
Fragment
:Intent intent = new Intent(getActivity(), mFragmentFavorite.class); startActivity(intent);
Dari sebuah
Activity
Intent intent = new Intent(this, mFragmentFavorite.class); startActivity(intent);
Jika Anda ingin memulai
aFavorite
daripadamFragmentFavorite
kemudian Anda hanya perlu mengubah nama mereka di buatIntent
.Juga, saya sarankan mengubah nama kelas Anda agar lebih akurat. Memanggil sesuatu
mFragmentFavorite
itu tidak pantas karena ituFragment
sama sekali bukan a . Juga, deklarasi kelas di Java biasanya dimulai dengan huruf kapital. Anda sebaiknya memberi nama kelas Anda sesuatu yangFavoriteActivity
lebih akurat dan sesuai dengan konvensi bahasa. Anda juga perlu mengganti nama file menjadi FavoriteActivity.java jika Anda memilih untuk melakukan ini karena Java memerlukan nama kelas yang cocok dengan nama file.MEMPERBARUI
Juga, sepertinya Anda benar-benar dimaksudkan untuk
mFragmentFavorite
menjadiFragment
bukanFragmentActivity
berdasarkan penggunaan AndaonCreateView
. Jika Anda inginmFragmentFavorite
menjadi seorangFragment
maka ubah baris kode berikut:public class mFragmentFavorite extends FragmentActivity{
Jadikan ini sebagai gantinya membaca:
public class mFragmentFavorite extends Fragment {
sumber
Fragment
atau anActivity
. Jika Anda menggunakan kode di dalam salah satu kelas tersebut, maka Anda dapat menggantimContextReference
dengangetActivity()
forFragment
atauthis
forActivity
di baris pertama danthis
untuk baris kedua. Saya akan mengupdate jawabannya agar lebih jelas.Fragment
ubahlahfindViewById
menjadiv.findViewById
. Tidak adafindViewById
fungsi yang masukFragment
jadi Anda harus menelepongetView
dulu baru memanggilnyafindViewById
. Namun dalam kasus Anda, Anda sudah memiliki viewonCreateView
dan itu akan menjadi variabel Andav
.Anda harus menggunakan
getActivity()
untuk meluncurkan aktivitas dari fragmenIntent intent = new Intent(getActivity(), mFragmentFavorite.class); startActivity(intent);
Selain itu, Anda harus memberi nama kelas dengan huruf besar:
MFragmentActivity
bukanmFragmentActivity
.sumber
Jika Anda menggunakan getActivity () maka Anda harus memastikan bahwa aktivitas panggilan sudah ditambahkan . Jika aktivitas belum ditambahkan dalam kasus seperti itu, Anda mungkin mendapatkan null saat memanggil getActivity ()
dalam kasus seperti ini getContext () aman
maka kode untuk memulai aktivitas akan sedikit berubah seperti,
Intent intent = new Intent(getContext(), mFragmentFavorite.class); startActivity(intent);
Aktivitas, Layanan, dan Aplikasi memperluas kelas ContextWrapper sehingga Anda bisa menggunakan ini atau getContext () atau getApplicationContext () sebagai pengganti argumen pertama.
sumber
Saya menggunakan ini dalam fragmen saya.
Button btn1 = (Button) thisLayout .findViewById(R.id.btnDb1); btn1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Intent intent = new Intent(getActivity(), otherActivity.class); ((MainActivity) getActivity()).startActivity(intent); } }); return thisLayout; }
sumber
Mulai Aktivitas baru Dari Fragmen:
Intent intent = new Intent(getActivity(), TargetActivity.class); startActivity(intent);
Memulai Aktivitas baru Dari Aktivitas:
Intent intent = new Intent(this, TargetActivity.class); startActivity(intent);
sumber
Anda mungkin harus mengganti getActivity () dengan MainActivity.ini untuk mereka yang mengalami masalah dengan ini.
sumber
dengan Kotlin saya menjalankan kode ini:
requireContext().startActivity<YourTargetActivity>()
sumber
None of the following functions can be called with the arguments supplied. startActivity(Intent!) defined in android.content.Context startActivity(Intent!, Bundle?) defined in android.content.Context