I am struggling to add this Fragment in to my XML layout.
In my Activity XML layout i have the following:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="0.5"
android:orientation="vertical" >
<fragment
android:id="@+id/fragment_invitefriendsprogress"
android:name="tv.superawesome.club.android.ui.fragments.InviteFriendsProgressFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:layout="@layout/fragment_invitefriendsprogress" />
</LinearLayout>
I get a strange error:
XML file line #205: Class is not a View android.support.v4.app.Fragment
line 205 is:
<fragment
Am I missing something?
For reference here is the full XML layout code:
<RelativeLayout
android:id="@+id/bar"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_alignParentBottom="true"
android:background="@drawable/actionbar" >
<ImageView
android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:src="@drawable/small" />
<ImageView
android:id="@+id/star"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="10dp"
android:src="@drawable/starpink" />
<ImageView
android:id="@+id/man"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/star"
android:layout_marginRight="25dp"
android:layout_toLeftOf="@+id/star"
android:src="@drawable/invitepink" />
</RelativeLayout>
<ScrollView
android:id="@+id/scrollView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/bar"
android:layout_alignParentTop="true"
android:background="@drawable/bg" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent" >
<RelativeLayout
android:id="@+id/inwrapper"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="0.5"
android:background="@drawable/bg"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="-10dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginTop="10dp"
android:background="@color/white"
android:gravity="center|top"
android:orientation="vertical" >
<com.myapp.jimbob.android.ui.CustomTextView
android:id="@+id/inTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:paddingLeft="18dp"
android:text="@string/intitle"
android:textSize="16sp" />
<com.myapp.jimbob.android.ui.CustomTextView
android:id="@+id/indescriptiob"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="18dp"
android:layout_marginRight="18dp"
android:layout_marginTop="2dp"
android:text="@string/indescription"
android:textSize="12sp" />
<EditText
android:id="@+id/emailedittext"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginTop="5dp"
android:background="@color/white"
android:drawablePadding="10dp"
android:ems="10"
android:hint="@string/yoemail"
android:inputType="textEmailAddress"
android:padding="10dp"
android:textSize="12sp" >
<requestFocus />
</EditText>
<Button
android:id="@+id/addbutton"
style="@style/OButton"
android:layout_height="30dp"
android:layout_marginTop="10dp"
android:text="@string/addinvite"
android:textSize="14sp" />
<com.myapp.jimbob.android.ui.CustomTextView
android:id="@+id/mailsdescriptiom"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="18dp"
android:layout_marginRight="18dp"
android:layout_marginTop="10dp"
android:text="@string/emailsofar"
android:textSize="12sp" />
<ScrollView
android:id="@+id/emailsscrollview"
android:layout_width="match_parent"
android:layout_height="92dp"
android:layout_marginLeft="18dp"
android:layout_marginRight="18dp"
android:layout_marginTop="8dp" >
<LinearLayout
android:id="@+id/emailslayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/light_gray"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/emailrow"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<com.myapp.jimbob.android.ui.CustomTextView
android:id="@+id/emailaddresstextview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0.9"
android:paddingLeft="15dp"
android:text="PlaceHolder"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textSize="12sp" />
<ImageView
android:id="@+id/cancelimageview"
android:layout_width="15dp"
android:layout_height="match_parent"
android:layout_weight="0.1"
android:src="@drawable/abs_clear" />
</LinearLayout>
</LinearLayout>
</ScrollView>
<Button
android:id="@+id/sendbutton"
style="@style/OButton"
android:layout_height="30dp"
android:layout_marginBottom="20dp"
android:layout_marginTop="10dp"
android:text="@string/mfriends"
android:textSize="14sp" />
<ProgressBar
android:id="@+id/friendindicator"
style="?android:attr/progressBarStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<Button
android:id="@+id/inviteprogressbutton"
style="@style/OrangeSmallButton"
android:layout_width="wrap_content"
android:layout_height="20dp"
android:layout_alignRight="@+id/linearLayout1"
android:layout_below="@+id/linearLayout1"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:text="abc"
android:textSize="10sp" />
</RelativeLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="0.5"
android:orientation="vertical" >
<fragment
android:id="@+id/fragment_myfragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.myapp.jimbob.android.ui.fragments.MyFragment"
/>
</LinearLayout>
</LinearLayout>
</ScrollView>
<include layout="@layout/layout_toast" />
Here is also the Fragment Class:
public class MyFragment extends SherlockFragment {
private CustomTextView mTitle;
private CustomTextView mDescription;
private CustomTextView mStar5Description;
private CustomTextView mStar10Description;
private ImageView mStar1, mStar2, mStar3, mStar4, mStar5, mStar6, mStar7,
mStar8, mStar9, mStar10;
private Button mFriends5Button;
private Button mFriends10Button;
private Button mInviteFriendsButton;
private int inviteCount;
private View mRootView = null;
private ProgressBar mProgressBar;
private void setAlphaForView(View v, float alpha) {
AlphaAnimation animation = new AlphaAnimation(alpha, alpha);
animation.setDuration(0);
animation.setFillAfter(true);
v.startAnimation(animation);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (mRootView != null) {
ViewGroup parent = (ViewGroup) mRootView.getParent();
if (parent != null)
parent.removeView(mRootView);
}
try {
mRootView = inflater
.inflate(R.layout.fragment_invitefriendsprogress, container, false);
} catch (InflateException e) {
/* map is already there, just return view as it is */
}
mTitle = (CustomTextView) mRootView.findViewById(R.id.progressTitle);
mDescription = (CustomTextView) mRootView.findViewById(R.id.progressDescription);
mStar5Description = (CustomTextView) mRootView.findViewById(R.id.progress5starDescription);
mStar10Description = (CustomTextView) mRootView.findViewById(R.id.progress10StarDescription);
mStar1 = (ImageView) mRootView.findViewById(R.id.invitestar1);
mStar2 = (ImageView) mRootView.findViewById(R.id.invitestar2);
mStar3 = (ImageView) mRootView.findViewById(R.id.invitestar3);
mStar4 = (ImageView) mRootView.findViewById(R.id.invitestar4);
mStar5 = (ImageView) mRootView.findViewById(R.id.invitestar5);
mStar6 = (ImageView) mRootView.findViewById(R.id.invitestar6);
mStar7 = (ImageView) mRootView.findViewById(R.id.invitestar7);
mStar8 = (ImageView) mRootView.findViewById(R.id.invitestar8);
mStar9 = (ImageView) mRootView.findViewById(R.id.invitestar9);
mStar10 = (ImageView) mRootView.findViewById(R.id.invitestar10);
mFriends5Button = (Button) mRootView.findViewById(R.id.guarantee5button);
mFriends10Button = (Button) mRootView.findViewById(R.id.guarantee10button);
mProgressBar = (ProgressBar) mRootView.findViewById(R.id.invitesProgressBar);
inviteCount = BoxStatusCache.getInstance(mRootView.getContext().getApplicationContext()).inviteCount;
if (MyTheme.getTheme(mRootView.getContext()) == MyTheme.BOA) {
mRootView.findViewById(R.id.bglayout).setBackgroundResource(
R.drawable.bgawesome);
mTitle.setCustom(false);
mTitle.setCustom(true, CustomTextView.BOATITLEFONT);
mTitle.setTextColor(getResources().getColor(R.color.purple));
mDescription.setCustom(true, CustomTextView.BOADESCFONT);
mStar5Description.setCustom(true, CustomTextView.BOADESCFONT);
mStar10Description.setCustom(true, CustomTextView.BOADESCFONT);
mFriends5Button.setTypeface(CustomTypeface.getTypefaceBOADesc(mRootView.getContext().getApplicationContext()));
mFriends10Button.setTypeface(CustomTypeface.getTypefaceBOADesc(mRootView.getContext().getApplicationContext()));
} else {
mRootView.findViewById(R.id.bglayout).setBackgroundResource(
R.drawable.bg);
mTitle.setCustom(true);
mFriends5Button.setBackgroundResource(R.drawable.pinksmallbutton);
mFriends10Button.setBackgroundResource(R.drawable.pinksmallbutton);
mTitle.setCustom(true, CustomTextView.TITLEFONT);
mTitle.setTextColor(getResources().getColor(R.color.pink));
mDescription.setCustom(true, CustomTextView.DESCFONT);
mStar5Description.setCustom(true, CustomTextView.DESCFONT);
mStar10Description.setCustom(true, CustomTextView.DESCFONT);
mFriends5Button.setTypeface(CustomTypeface.getTypefaceDesc(mRootView.getContext().getApplicationContext()));
mFriends10Button.setTypeface(CustomTypeface.getTypefaceDesc(mRootView.getContext().getApplicationContext()));
}
mStar1.setImageResource(R.drawable.notinvited);
mStar2.setImageResource(R.drawable.notinvited);
mStar3.setImageResource(R.drawable.notinvited);
mStar4.setImageResource(R.drawable.notinvited);
mStar5.setImageResource(R.drawable.notinvited);
mStar6.setImageResource(R.drawable.notinvited);
mStar7.setImageResource(R.drawable.notinvited);
mStar8.setImageResource(R.drawable.notinvited);
mStar9.setImageResource(R.drawable.notinvited);
mStar10.setImageResource(R.drawable.notinvited);
// Uncomment this after finish debugging
if (inviteCount < 10) {
setAlphaForView(mFriends10Button, 0.5f);
mFriends10Button.setClickable(false);
if (inviteCount < 5) {
setAlphaForView(mFriends5Button, 0.5f);
mFriends5Button.setClickable(false);
}
}
final Context context = mRootView.getContext();
mFriends5Button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mProgressBar.setVisibility(View.VISIBLE);
setAlphaForView(mFriends5Button, 0.5f);
// TODO Auto-generated method stub
new AsyncTask<Void, Void, JSONObject>() {
@Override
protected JSONObject doInBackground(Void... params) {
try {
HashMap<Object, Object> data = new HashMap<Object, Object>();
if (MyTheme.getTheme(context) == MyTheme.TWO) {
data.put("site", 1);
} else {
data.put("site", 0);
}
data.put("invite_amount", 5);
LogUtils.log("redeem data: " + data.toString());
String response = HttpRequestController
.getInstance().doRequest(
ApiUrls.REDEEM_INVITATION, data,
Method.POST, MainActivity.token);
return new JSONObject(response);
} catch (Exception e) {
e.printStackTrace();
mProgressBar.setVisibility(View.INVISIBLE);
setAlphaForView(mFriends5Button, 1.0f);
return null;
}
}
@Override
protected void onPostExecute(JSONObject result) {
mProgressBar.setVisibility(View.INVISIBLE);
setAlphaForView(mFriends5Button, 1.0f);
try {
if (result.getBoolean("success")) {
makeGoodToastAndEatIt();
LogUtils.log("result MyActivity: "
+ result.toString());
getActivity().setResult(getActivity().RESULT_OK);
SyncUtils.forceUpdateProfile();
} else {
LogUtils.log("error_msg: " + result.toString());
if (result.getString("error_msg").contains(
"Not enough")) {
ToastAnimationUtils
.setUpAnimations(
getActivity(),
"Not enough invitations. Invite some more friends and try again!",
false);
} else {
ToastAnimationUtils
.setUpAnimations(
getActivity(),
"Try again later.",
false);
}
}
} catch (Exception e) {
e.printStackTrace();
ToastAnimationUtils
.setUpAnimations(
getActivity(),
"Try again later. ",
false);
}
}
}.execute();
}
});
mFriends10Button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
mProgressBar.setVisibility(View.VISIBLE);
setAlphaForView(mFriends10Button, 0.5f);
// TODO Auto-generated method stub
new AsyncTask<Void, Void, JSONObject>() {
@Override
protected JSONObject doInBackground(Void... params) {
try {
HashMap<Object, Object> data = new HashMap<Object, Object>();
if (MyTheme.getTheme(context) == MyTheme.BOA) {
data.put("site", 1);
} else {
data.put("site", 0);
}
data.put("invite_amount", 10);
LogUtils.log("redeem data: " + data.toString());
String response = HttpRequestController
.getInstance().doRequest(
ApiUrls.REDEEM_INVITATION, data,
Method.POST, MainActivity.token);
return new JSONObject(response);
} catch (Exception e) {
e.printStackTrace();
mProgressBar.setVisibility(View.INVISIBLE);
setAlphaForView(mFriends10Button, 1.0f);
return null;
}
}
@Override
protected void onPostExecute(JSONObject result) {
mProgressBar.setVisibility(View.INVISIBLE);
setAlphaForView(mFriends10Button, 1.0f);
try {
if (result.getBoolean("success")) {
makeMegaGoodToastAndEatIt();
LogUtils.log("result MyActivity: "
+ result.toString());
getActivity().setResult(MainActivity.RESULT_OK);
SyncUtils.forceUpdateProfile();
} else {
if (result.getString("error_msg").contains(
"Not enough")) {
ToastAnimationUtils
.setUpAnimations(
getActivity(),
"Not enough invitations. Invite some more friends and try again!",
false);
} else {
ToastAnimationUtils
.setUpAnimations(
getActivity(),
" Try again later.",
false);
}
}
} catch (Exception e) {
e.printStackTrace();
ToastAnimationUtils
.setUpAnimations(
getActivity(),
"Try again later. ",
false);
}
}
}.execute();
}
});
LogUtils.log("inviteCount: " + inviteCount);
if (inviteCount > 0 && MyTheme.getTheme(getActivity()) == MyTheme.TWO) {
mStar1.setImageResource(R.drawable.invited);
if (inviteCount > 1) {
mStar2.setImageResource(R.drawable.invited);
if (inviteCount > 2) {
mStar3.setImageResource(R.drawable.invited);
if (inviteCount > 3) {
mStar4.setImageResource(R.drawable.invited);
if (inviteCount > 4) {
mStar5.setImageResource(R.drawable.invited);
if (inviteCount > 5) {
mStar6.setImageResource(R.drawable.invited);
if (inviteCount > 6) {
mStar7.setImageResource(R.drawable.invited);
if (inviteCount > 7) {
mStar8.setImageResource(R.drawable.invited);
if (inviteCount > 8) {
mStar9.setImageResource(R.drawable.invited);
if (inviteCount > 9) {
mStar10.setImageResource(R.drawable.invited);
}
}
}
}
}
}
}
}
}
} else if (inviteCount > 0
&& MyTheme.getTheme(getActivity()) == MyTheme.ONE) {
mStar1.setImageResource(R.drawable.invited);
if (inviteCount > 1) {
mStar2.setImageResource(R.drawable.invited);
if (inviteCount > 2) {
mStar3.setImageResource(R.drawable.invited);
if (inviteCount > 3) {
mStar4.setImageResource(R.drawable.invited);
if (inviteCount > 4) {
mStar5.setImageResource(R.drawable.invited);
if (inviteCount > 5) {
mStar6.setImageResource(R.drawable.invited);
if (inviteCount > 6) {
mStar7.setImageResource(R.drawable.invited);
if (inviteCount > 7) {
mStar8.setImageResource(R.drawable.invited);
if (inviteCount > 8) {
mStar9.setImageResource(R.drawable.invited);
if (inviteCount > 9) {
mStar10.setImageResource(R.drawable.invited);
}
}
}
}
}
}
}
}
}
}
return mRootView;
}
}
full logcat:
01-03 13:36:18.840: E/ACRA(6144): ACRA caught a RuntimeException exception for com.myapp.jimbob.android. Building report.
01-03 13:36:19.252: E/AndroidRuntime(6144): FATAL EXCEPTION: main
01-03 13:36:19.252: E/AndroidRuntime(6144): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myapp.jimbob.android/com.myapp.jimbob.android.ui.activities.MyActivity}: android.view.InflateException: Binary XML file line #205: Error inflating class fragment
01-03 13:36:19.252: E/AndroidRuntime(6144): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
01-03 13:36:19.252: E/AndroidRuntime(6144): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
01-03 13:36:19.252: E/AndroidRuntime(6144): at android.app.ActivityThread.access$600(ActivityThread.java:141)
01-03 13:36:19.252: E/AndroidRuntime(6144): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
01-03 13:36:19.252: E/AndroidRuntime(6144): at android.os.Handler.dispatchMessage(Handler.java:99)
01-03 13:36:19.252: E/AndroidRuntime(6144): at android.os.Looper.loop(Looper.java:137)
01-03 13:36:19.252: E/AndroidRuntime(6144): at android.app.ActivityThread.main(ActivityThread.java:5103)
01-03 13:36:19.252: E/AndroidRuntime(6144): at java.lang.reflect.Method.invokeNative(Native Method)
01-03 13:36:19.252: E/AndroidRuntime(6144): at java.lang.reflect.Method.invoke(Method.java:525)
01-03 13:36:19.252: E/AndroidRuntime(6144): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
01-03 13:36:19.252: E/AndroidRuntime(6144): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
01-03 13:36:19.252: E/AndroidRuntime(6144): at dalvik.system.NativeStart.main(Native Method)
01-03 13:36:19.252: E/AndroidRuntime(6144): Caused by: android.view.InflateException: Binary XML file line #205: Error inflating class fragment
01-03 13:36:19.252: E/AndroidRuntime(6144): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:713)
01-03 13:36:19.252: E/AndroidRuntime(6144): at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
01-03 13:36:19.252: E/AndroidRuntime(6144): at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
01-03 13:36:19.252: E/AndroidRuntime(6144): at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
01-03 13:36:19.252: E/AndroidRuntime(6144): at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
01-03 13:36:19.252: E/AndroidRuntime(6144): at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
01-03 13:36:19.252: E/AndroidRuntime(6144): at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
01-03 13:36:19.252: E/AndroidRuntime(6144): at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
01-03 13:36:19.252: E/AndroidRuntime(6144): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:267)
01-03 13:36:19.252: E/AndroidRuntime(6144): at com.actionbarsherlock.internal.ActionBarSherlockNative.setContentView(ActionBarSherlockNative.java:133)
01-03 13:36:19.252: E/AndroidRuntime(6144): at com.actionbarsherlock.app.SherlockActivity.setContentView(SherlockActivity.java:229)
01-03 13:36:19.252: E/AndroidRuntime(6144): at com.myapp.jimbob.android.ui.activities.MyActivity.onCreate(MyActivity.java:75)
01-03 13:36:19.252: E/AndroidRuntime(6144): at android.app.Activity.performCreate(Activity.java:5133)
01-03 13:36:19.252: E/AndroidRuntime(6144): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
01-03 13:36:19.252: E/AndroidRuntime(6144): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
01-03 13:36:19.252: E/AndroidRuntime(6144): ... 11 more
01-03 13:36:19.252: E/AndroidRuntime(6144): Caused by: java.lang.ClassCastException: com.myapp.jimbob.android.ui.fragments.MyFragment cannot be cast to android.app.Fragment
01-03 13:36:19.252: E/AndroidRuntime(6144): at android.app.Fragment.instantiate(Fragment.java:585)
01-03 13:36:19.252: E/AndroidRuntime(6144): at android.app.Fragment.instantiate(Fragment.java:560)
01-03 13:36:19.252: E/AndroidRuntime(6144): at android.app.Activity.onCreateView(Activity.java:4738)
01-03 13:36:19.252: E/AndroidRuntime(6144): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:689)
01-03 13:36:19.252: E/AndroidRuntime(6144): ... 25 more
instead of this...
<android.support.v4.app.Fragment
android:id="@+id/fragment_myfragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.myapp.jimbob.android.ui.fragments.MyFragment"
tools:layout="@layout/fragment_myfragment" />
write like
<fragment
android:id="@+id/fragment_myfragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.myapp.jimbob.android.ui.fragments.MyFragment" />
You can not directly reference class name in xml for Fragment as it does not extend View
Change to
<fragment
android:id="@+id/fragment_myfragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.myapp.jimbob.android.ui.fragments.MyFragment"
/>
Your MyFragment can extend Fragment and you can use SupportLibrary. Make sure you have the proper imports and make sure your Activity extends FragmentActivity if you want to use fragments below api level 11 and below.
More info read
http://developer.android.com/guide/topics/ui/declaring-layout.html
and
http://developer.android.com/guide/components/fragments.html
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With