我目前正在学习Android片段编程几个小时,但是我的片段没有显示出来。 我没有得到任何错误。调试显示从不调用片段类的onCreateView()。
这是我的主要布局activity_main.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
<LinearLayout
android:id="@+id/FragCont"
android:layout_width="100dp"
android:layout_height="200dp"
android:layout_alignParentRight="true"
android:layout_toRightOf="@+id/textView1"
android:orientation="vertical" >
</LinearLayout>
这是我的主要活动:
package k.myApp;
import com.actionbarsherlock.app.SherlockActivity;
import com.actionbarsherlock.app.SherlockFragment;
import com.actionbarsherlock.app.SherlockFragmentActivity;
import android.os.Bundle;
import android.app.Activity;
import android.app.FragmentTransaction;
import android.support.v4.app.FragmentActivity;
import android.view.Menu;
import android.widget.Toast;
public class MainActivity extends FragmentActivity {
SherlockFragment Fragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
CentralData.getDataSource().open();
CentralData.getDataSource().close();
FragmentShowNotes fsn = new FragmentShowNotes();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.FragCont, fsn);
transaction.commit();
}
}
这是我的片段类FragmentShowNotes.java: 包k.myApp;
import org.holoeverywhere.LayoutInflater;
import android.app.Fragment;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import com.actionbarsherlock.app.SherlockFragment;
public class FragmentShowNotes extends Fragment{
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
return inflater.inflate(R.layout.frag_show_notes, container, false);
}
}
最后但并非最不重要的是我的片段布局,frag_show_notes.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="Dies ist das ShowNotesFragment" />
</LinearLayout>
有人知道出了什么问题吗?谢谢!
答案 0 :(得分:1)
尝试
getSupportFragmentManager (you use SherlockActionBar)
答案 1 :(得分:0)
试试这个
getSupportFragmentManager().beginTransaction().add(android.R.id.content, fsn).commit();
答案 2 :(得分:0)
另一种方法是将Linearlayout替换为com.actionbarsherlock.app.SherlockFragment.FragmentShowNotes
答案 3 :(得分:0)
谢谢大家的帮助! 现在我编写了一个只有片段而没有Holoeverywhere的新项目,并且它有效。
我的项目中的错误是在片段类中: 我导入org.holoeverywhere.LayoutInflater,将其更改为android.view.LayoutInflater解决了它。 我希望这不会影响旧设备上的Holo风格,但我相信不会:)
答案 4 :(得分:0)
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.ripa.chatapplication.FriendsFragment">
<android.support.v7.widget.RecyclerView
android:id="@+id/friends_list"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content" android:layout_height="wrap_content">
<de.hdodenhof.circleimageview.CircleImageView
android:layout_width="90sp"
android:layout_height="90sp"
android:src="@drawable/index"
android:id="@+id/user_single_image" />
<TextView
android:id="@+id/user_single_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentTop="true"
android:layout_marginEnd="50dp"
android:layout_marginTop="11dp"
android:text="Display Name"
android:textColor="#000000"
android:textSize="25sp" />
<TextView
android:id="@+id/user_single_status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/user_single_image"
android:layout_alignEnd="@+id/user_single_name"
android:layout_marginBottom="12dp"
android:text="@string/user_default_status"
android:textColor="#000000"
android:textSize="20sp" />
</RelativeLayout>
package com.example.ripa.chatapplication;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import java.util.jar.Attributes;
/**
* A simple {@link Fragment} subclass.
*/
public class FriendsFragment extends Fragment {
private RecyclerView mFriendsList;
private DatabaseReference mUsersDatabase;
private DatabaseReference mFriendsDatabase;
private String mCurrent_user_id;
private FirebaseAuth mAuth;
private View mMainView;
public FriendsFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
mMainView = inflater.inflate(R.layout.fragment_friends, container, false);
mFriendsList =(RecyclerView)mMainView.findViewById(R.id.friends_list);
mAuth =FirebaseAuth.getInstance();
mCurrent_user_id = mAuth.getCurrentUser().getUid();
mFriendsDatabase = FirebaseDatabase.getInstance().getReference().child("Friends").child(mCurrent_user_id);
mUsersDatabase = FirebaseDatabase.getInstance().getReference().child("Users");
mFriendsList.setHasFixedSize(true);
mFriendsList.setLayoutManager(new LinearLayoutManager(getContext()));
return mMainView;
}
@Override
public void onStart() {
super.onStart();
FirebaseRecyclerAdapter<Friends, FriendsViewHolder> FriendsRecylerViewAdapter = new FirebaseRecyclerAdapter<Friends, FriendsViewHolder>(
Friends.class,
R.id.users_single_layout,
FriendsViewHolder.class,
mFriendsDatabase
) {
@Override
protected void populateViewHolder(final FriendsViewHolder friendsViewHolder, Friends friends, int i) {
friendsViewHolder.setDate(friends.getDate());
String list_user_id =getRef(i).getKey();
mUsersDatabase.child(list_user_id).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String userName = dataSnapshot.child("name").getValue().toString();
String userThumb =dataSnapshot.child("thumb_image").getValue().toString();
friendsViewHolder.setName(userName);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
};
mFriendsList.setAdapter(FriendsRecylerViewAdapter);
}
public static class FriendsViewHolder extends RecyclerView.ViewHolder{
View mView;
public FriendsViewHolder(View itemView) {
super(itemView);
mView = itemView;
}
public void setDate(String date){
TextView userNameView =(TextView) mView.findViewById(R.id.user_single_status);
userNameView.setText(date);
}
public void setName(String name){
TextView userNameView =(TextView) mView.findViewById(R.id.user_single_name);
userNameView.setText(name);
}
}
}