片段中的卡片的Recyclerview没有显示任何内容

时间:2018-08-08 17:05:49

标签: java android android-fragments android-recyclerview

我正在尝试进行一个活动,其中包含一个带有recyclerViewcards的片段。现在,它仅显示活动,该片段为空,我不知道这里发生了什么。

这是activityfragmentadapter

的代码

活动:

package com.laorden.goodreasons.habits;

import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.VisibleForTesting;
import android.support.design.widget.NavigationView;
import android.support.test.espresso.IdlingResource;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
import android.view.Window;
import android.view.WindowManager;

import com.laorden.goodreasons.Injection;
import com.laorden.goodreasons.R;
import com.laorden.goodreasons.statistics.StatisticsActivity;
import com.laorden.goodreasons.util.ActivityUtils;
import com.laorden.goodreasons.util.EspressoIdlingResource;

public class HabitsActivity extends AppCompatActivity {

    private DrawerLayout mDrawerLayout;
    private HabitsPresenter mHabitsPresenter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.habits_act);
        Window w = getWindow();
        w.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);


        // Set up the toolbar.
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        ActionBar ab = getSupportActionBar();
        ab.setHomeAsUpIndicator(R.drawable.ic_menu);
        ab.setDisplayHomeAsUpEnabled(true);

        // Set up the navigation drawer.
        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mDrawerLayout.setStatusBarBackground(R.color.colorPrimaryDark);
        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        if (navigationView != null) {
            setupDrawerContent(navigationView);
        }

        HabitsFragment habitsFragment =
                (HabitsFragment) getSupportFragmentManager().findFragmentById(R.id.contentFrame);
        if (habitsFragment == null) {
            // Create the fragment
            habitsFragment = HabitsFragment.newInstance();
            ActivityUtils.addFragmentToActivity(
                    getSupportFragmentManager(), habitsFragment, R.id.contentFrame);
        }

        // Create the presenter
        mHabitsPresenter = new HabitsPresenter(habitsFragment,
                Injection.provideUseCaseHandler());
    }
      /*  // Load previously saved state, if available.
        if (savedInstanceState != null) {
            TasksFilterType currentFiltering =
                    (TasksFilterType) savedInstanceState.getSerializable(CURRENT_FILTERING_KEY);
            mTasksPresenter.setFiltering(currentFiltering);
        }
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        outState.putSerializable(CURRENT_FILTERING_KEY, mTasksPresenter.getFiltering());

        super.onSaveInstanceState(outState);
    }*/


    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                // Open the navigation drawer when the home icon is selected from the toolbar.
                mDrawerLayout.openDrawer(GravityCompat.START);
                return true;
        }
        return super.onOptionsItemSelected(item);
    }

    private void setupDrawerContent(NavigationView navigationView) {
        navigationView.setNavigationItemSelectedListener(
                new NavigationView.OnNavigationItemSelectedListener() {
                    @Override
                    public boolean onNavigationItemSelected(MenuItem menuItem) {
                        switch (menuItem.getItemId()) {
                            case R.id.list_navigation_menu_item:
                                // Do nothing, we're already on that screen
                                break;
                            case R.id.statistics_navigation_menu_item:
                                Intent intent =
                                        new Intent(HabitsActivity.this, StatisticsActivity.class);
                                startActivity(intent);
                                break;
                            default:
                                break;
                        }
                        // Close the navigation drawer when an item is selected.
                        menuItem.setChecked(true);
                        mDrawerLayout.closeDrawers();
                        return true;
                    }
                });
    }

    @VisibleForTesting
    public IdlingResource getCountingIdlingResource() {
        return EspressoIdlingResource.getIdlingResource();
    }
}

片段:

package com.laorden.goodreasons.habits;

import android.os.Bundle;
import android.support.annotation.Nullable;
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.view.Window;
import android.view.WindowManager;

import com.laorden.goodreasons.R;
import com.laorden.goodreasons.habits.domain.model.Habit;

import java.util.ArrayList;
import java.util.List;

public class HabitsFragment extends android.support.v4.app.Fragment implements HabitsContract.View  {


private HabitsContract.Presenter mPresenter;

private HabitsAdapter mListAdapter;
private RecyclerView recyclerView;


public HabitsFragment() {
    // Requires empty public constructor
}

public static HabitsFragment newInstance() {
    return new HabitsFragment();
}


@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    List<Habit> habitsList = new ArrayList<>();
    habitsList.add(new Habit(R.drawable.smoke,"Quit smoking",300));
    habitsList.add(new Habit(R.drawable.books,"Read more",600));
    habitsList.add(new Habit(R.drawable.sleep,"Get more sleep",600));
    mListAdapter = new HabitsAdapter(getContext(),habitsList);
}



@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View root = inflater.inflate(R.layout.habits_frag, container, false);
    recyclerView = root.findViewById(R.id.rv_list);

    recyclerView.setAdapter(mListAdapter);
    recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
    return root;
}


@Override
public void onResume() {
    super.onResume();
    mPresenter.start();
}


@Override
public void setLoadingIndicator(boolean active) {

}

@Override
public void showHabits(List<Habit> habits) {

}

@Override
public void showHabitDetailsUi(String habitId) {

}

@Override
public boolean isActive() {
    return false;
}

@Override
public void setPresenter(HabitsContract.Presenter presenter) {
    mPresenter = presenter;
}
}

适配器:

package com.laorden.goodreasons.habits;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.laorden.goodreasons.R;
import com.laorden.goodreasons.habits.domain.model.Habit;

import java.util.List;


public class HabitsAdapter extends RecyclerView.Adapter<HabitsAdapter.myViewHolder> {

    Context mContext;
    List<Habit> mData;


    public HabitsAdapter(Context mContext, List<Habit> mData) {
        this.mContext = mContext;
        this.mData = mData;
    }

    @Override
    public myViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        LayoutInflater inflater = LayoutInflater.from(mContext);
        View v = inflater.inflate(R.layout.card_item,parent,false);
        return new myViewHolder(v);
    }

    @Override
    public void onBindViewHolder(myViewHolder holder, int position) {
        holder.background_image.setImageResource(mData.get(position).getBackground());
        holder.tv_title.setText(mData.get(position).getHabitName());
        holder.tv_nbSubscribers.setText(mData.get(position).getNumSubscribers() + " Joined");
    }

    @Override
    public int getItemCount() {
        return 0;
    }

    public class myViewHolder extends RecyclerView.ViewHolder {

        ImageView background_image;
        TextView tv_title,tv_nbSubscribers;

        public myViewHolder(View itemView) {
            super(itemView);
            background_image = itemView.findViewById(R.id.card_background);
            tv_title = itemView.findViewById(R.id.card_title);
            tv_nbSubscribers = itemView.findViewById(R.id.card_numberUsers);
        }
    }

}

如果您需要其他任何代码段,请告诉我(也许是xml  布局)

谢谢

3 个答案:

答案 0 :(得分:1)

那是因为您在getItemCount方法中返回0

更改此内容:

@Override
 public int getItemCount() {
    return 0;
 }

对此:

@Override
 public int getItemCount() {
    return (mData != null ?  mData.size():0);
}

答案 1 :(得分:0)

您应该首先设置布局管理器

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View root = inflater.inflate(R.layout.habits_frag, container, false);
    recyclerView = root.findViewById(R.id.rv_list);


    recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
    recyclerView.setAdapter(mListAdapter);
    return root;
}

还需要将getItemCount更改为

@Override
    public int getItemCount() {
         if(mData!=null){return mData.size();}else return 0;
    }

答案 2 :(得分:0)

因为方法getItemCount返回0,所以得到空列表的原因。 这是修改后的方法。

@Override
public int getItemCount() {
    return mData!=null ? mData.size():0;
}