问题
I am using the navigation-drawer
template in eclipse to do a simple Android application.
I have some trouble with fragment.
I declared a fragment called PresenceLog Fragment in manifest but when I called it in MainActivity
, the log still says that
03-23 13:54:50.817: E/AndroidRuntime(16750): android.content.ActivityNotFoundException: Unable to find explicit activity class {com.singtel.ricecooker/com.singtel.ricecooker.PresenceLogFragment}; have you declared this activity in your AndroidManifest.xml?
Here is my manifest
Here is my fragment class
public class PresenceLogFragment extends Fragment{
private TextView myText = null;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.presence_log, null);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
ArrayList<String> userList = null;
RiceServerRequest newRequest = new RiceServerRequest();
//newRequest.getRequestInfo(this);
}
public void updateUserList(ArrayList<String> userList){
LinearLayout lView = (LinearLayout) getView().findViewById (R.layout.presence_log);
//LinearLayout ll = (LinearLayout)fragment.getView().findViewById(R.id.commentFragmentLayout);
for (int i = 0; i < userList.size();i++){
myText = new TextView(getActivity());
myText.setText(userList.get(i));
lView.addView(myText);
}
//setContentView(lView);
}
Here is my MainActivity
private void launchPresenceLog(){
Intent intent = new Intent(this,PresenceLogFragment.class);
startActivity(intent);
}
It would be great if you know what is wrong with my code. Also, since I am new to Android programming, I would appreciate it if you could suggest some online courses.
回答1:
You have created a Fragment so you could not call it like a Activity. You need to replace a container view, properly an FrameLayout with your Fragment.
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.content_frame, new PresenceLogFragment())
.commit();
回答2:
You can't load a fragment through Intent. You have to do it using fragment manager in this way:
Fragment fragment = new PresenceLogFragment(MainActivity.this);
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction ft = fragmentManager.beginTransaction();
ft.replace(R.id.yourFragmentContainer, fragment).commit();
回答3:
have you declared this activity in your AndroidManifest.xml?
Look in your manifest and see if you have an <activity>
element that has your activity registered. If not, add one.
Have a look here: http://developer.android.com/guide/topics/manifest/activity-element.html
回答4:
it is clear.
"have you declared this activity in your AndroidManifest.xml?"
you should check is there a tag。
see this or maybe this
回答5:
Please open the manifest file and declare like this:
<activity
android:name=".MainActivity" //your activity name
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
if this is your lauch activity then do this otherwise do this
<activity
android:name=".MainActivity"//your activity name
android:label="@string/app_name" >
</activity>
type the name of your java file which extends Activity not the Fargment. Means the Fragment which creates from that Activity java file.
回答6:
<activity
android:name="com.singtel.ricecooker.PresenceLogFragment"
android:label="@string/app_name" >
</activity>
add this in your manifest file if com.singtel.ricecooker.PresenceLogFragment represents an activity and if it is a fragment then you are doing it wrong. in second case use below code,
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.content_frame, new PresenceLogFragment())
.commit();
回答7:
You are trying to use a fragment as an activity. You can either rename PresenceLogFragment to PresenceLogActivity and have it extend Activity instead of Fragment or you can try and use your fragment as a fragment.
Also, any activity you try to use in your app needs to be declared in the manifest (link)
More about fragments and how to use them here
来源:https://stackoverflow.com/questions/29210295/android-fragment-exceptionactivity-not-found