我正在尝试在我的工具栏下显示一个片段。该片段包含一个回收者视图。在fragment类中,我设置了适配器。然后适配器应该膨胀card_feed_view.xml
布局并在屏幕上显示它。
.add(R.id.fragment_container, fragment)
方法似乎无法正常工作,因为片段确实出现(通过添加黑色背景进行测试),但内容(recycleler-view)却没有。我已将fragment_container id添加到我在根元素中添加片段的活动中。
单击操作栏操作时,我还有其他片段可以替换此片段。对于这些事务,我使用.replace(R.id.current_fragment, newFragment)
方法。它们也完美地互相替换,但每个片段的内容似乎永远不会出现。
在下面的代码中,为简洁起见,删除了import语句。
MainActivity.java :
public class MainActivity extends AppCompatActivity {
private static final String TAG = MainActivity.class.getSimpleName();
private FeedFragment feedFragment = new FeedFragment();
private EventsFragment eventsFragment = new EventsFragment();
private SearchFragment searchFragment = new SearchFragment();
private MoreFragment moreFragment = new MoreFragment();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.main_toolbar);
setSupportActionBar(toolbar);
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.add(R.id.fragment_container, feedFragment);
transaction.commit();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.main_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_feed:
// Add the feed fragment
replaceFragment(feedFragment, R.id.fragment_container);
return true;
case R.id.action_events:
// Add the events fragment
replaceFragment(eventsFragment, R.id.fragment_container);
return true;
case R.id.action_search:
// Add the search fragment
replaceFragment(searchFragment, R.id.fragment_container);
return true;
case R.id.action_more:
// Add the more fragment
replaceFragment(moreFragment, R.id.fragment_container);
return true;
default:
// If we got here, the user's action was not recognized.
// Invoke the superclass to handle it.
return super.onOptionsItemSelected(item);
}
}
/**
* Replaces the current fragment with a new fragment
*
* @param newFragment
* @param currentFragmentId
*/
private void replaceFragment(Fragment newFragment, int currentFragmentId) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(currentFragmentId, newFragment);
transaction.commit();
}
}
activity_main.xml中:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment_container"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".view.activity.MainActivity">
<android.support.v7.widget.Toolbar
android:id="@+id/main_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:elevation="4dp"
android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
</RelativeLayout>
FeedFragment.java :
public class FeedFragment extends Fragment {
public View mView;
public FeedFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
mView = inflater.inflate(R.layout.fragment_feed, container, false);
FeedAdapter adapter = new FeedAdapter(getContext());
RecyclerView cardList = (RecyclerView) mView.findViewById(R.id.card_feed);
LinearLayoutManager manager = new LinearLayoutManager(getContext());
manager.setOrientation(LinearLayoutManager.VERTICAL);
cardList.setHasFixedSize(true);
cardList.setLayoutManager(manager);
cardList.setAdapter(adapter);
return mView;
}
}
fragment_feed.xml :
<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:background="#000"
android:orientation="vertical"
tools:context=".view.fragment.FeedFragment">
<!-- actual background = #f2f2f2 -->
<android.support.v7.widget.RecyclerView
android:id="@+id/card_feed"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
FeedAdapter.java :
public class FeedAdapter extends RecyclerView.Adapter<FeedAdapter.ViewHolder> {
public Context context;
public FeedAdapter(Context context) {
this.context = context;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.
from(parent.getContext()).
inflate(R.layout.card_feed_view, parent, false);
return new ViewHolder(itemView);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.infoText.setText("I am here!");
}
@Override
public int getItemCount() {
return 0;
}
public static class ViewHolder extends RecyclerView.ViewHolder {
ImageView profileImage;
ImageView mainImage;
TextView infoText;
TextView postDateText;
ImageButton likeCountImageButton;
ImageButton goingImageButton;
public ViewHolder(View itemView) {
super(itemView);
profileImage = (ImageView) itemView.findViewById(R.id.card_profile_image_view);
mainImage = (ImageView) itemView.findViewById(R.id.card_main_image_view);
infoText = (TextView) itemView.findViewById(R.id.card_info_text);
postDateText = (TextView) itemView.findViewById(R.id.date_text_view);
likeCountImageButton = (ImageButton) itemView.findViewById(R.id.like_count_button);
goingImageButton = (ImageButton) itemView.findViewById(R.id.going_image_button);
}
}
}
那么这笔交易是什么?我如何解决这个烦人的错误。
谢谢你们。