2016-10-06 10 views
1

私はアンドロイドプログラミングで新しく、"アダプターは接続されず、レイアウトをスキップする"というエラーが表示されます。私のアプリケーションは実行されますが、その中にカードビューを持つフラグメントを開くためにクリックすると、ArrayListの最初のコンテンツのみが表示されます。 私はこのチュートリアルに従っています:https://code.tutsplus.com/tutorials/getting-started-with-recyclerview-and-cardview-on-android--cms-23465、しかし私は別のやり方でやっています。私は活動の代わりに断片を使っていますが、それは問題ではないと思います。アダプターは接続されていません。レイアウトをスキップする最初のコンテンツのみを表示する

public class Av_ninja extends AppCompatActivity { 

TabLayout tabLayout; 
ViewPager viewPager; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_av_ninja); 

    viewPager = (ViewPager) findViewById(R.id.viewPager); 
    viewPager.setAdapter(new CustomAdapter(getSupportFragmentManager(), getApplicationContext())); 

    tabLayout = (TabLayout) findViewById(R.id.tabLayout); 
    tabLayout.setupWithViewPager(viewPager); 

    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
     @Override 
     public void onTabSelected(TabLayout.Tab tab) { 
      viewPager.setCurrentItem(tab.getPosition()); 
     } 

     @Override 
     public void onTabUnselected(TabLayout.Tab tab) { 

     } 

     @Override 
     public void onTabReselected(TabLayout.Tab tab) { 

     } 
    }); 
} 

private class CustomAdapter extends FragmentPagerAdapter{ 
    private String fragmentes [] = {"Info","Abilitities"}; 

    public CustomAdapter(FragmentManager suppFragmentManager, Context applicaContext){ 
     super(suppFragmentManager); 
    } 

    @Override 
    public Fragment getItem(int position){ 
     switch (position){ 
      case 0: 
       return new Fragment1(); 
      case 1: 
       return new Fragment2(); 
      default: 
       return null; 
     } 

    } 

    @Override 
    public int getCount(){ 
     return fragmentes.length; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return fragmentes[position]; 
    } 
} 
} 

断片

public class Fragment1 extends Fragment { 

ImageView Icons; 
TextView Titulos; 
TextView Textos; 


public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 
    // return inflater.inflate(R.layout.frag1,container,false); 
    View rootView = inflater.inflate(R.layout.card_ninja_info,container,false); 

    Icons = (ImageView) rootView.findViewById(R.id.Icons); 
    Titulos = (TextView) rootView.findViewById(R.id.Titulos); 
    Textos = (TextView) rootView.findViewById(R.id.Textos); 

    Icons.setImageResource(R.drawable.offenseicon); 
    Titulos.setText("Role"); 
    Textos.setText("Scout"); 

    return rootView; 
} 
} 

RecyclerView

public class RecyclerViewAv extends Fragment{ 

private List<Heroi> herois; 
private RecyclerView rv; 

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 
    //return inflater.inflate(R.layout.frag2,container,false); 
    View rootView = inflater.inflate(R.layout.card_ninja_info,container,false); 

    rv = (RecyclerView)rootView.findViewById(R.id.rv_frag1); 

    LinearLayoutManager llm = new LinearLayoutManager(getActivity()); 
    rv.setLayoutManager(llm); 
    rv.setHasFixedSize(true); 

    initializeData(); 
    initializeAdapter(); 

    return rootView; 
} 


private void initializeData(){ 
    herois = new ArrayList<>(); 
    herois.add(new Heroi(R.drawable.offenseicon, "Role", "Scout")); 
    herois.add(new Heroi(R.drawable.identityicon, "Identity", "Genji Shimada")); 
    herois.add(new Heroi(R.drawable.workicon, "Work", "Adventurer")); 
    herois.add(new Heroi(R.drawable.localizationicon, "Base of Operation", "Nepal")); 
    herois.add(new Heroi(R.drawable.empresaicon, "Affiliation", "Shiamda Clan")); 
    herois.add(new Heroi(R.drawable.ageicon, "Age", "27")); 
    herois.add(new Heroi(R.drawable.healthicon, "Health", "100")); 

} 

private void initializeAdapter(){ 
    RVAdapter adapter = new RVAdapter(herois); 
    rv.setAdapter(adapter); 
} 

} 

アダプタ

:だから、ここで私は私の 活動を持っています
public class RVAdapter extends RecyclerView.Adapter<RVAdapter.HeroiViewHolder>{ 

public static class HeroiViewHolder extends RecyclerView.ViewHolder{ 

    CardView cv; 
    ImageView Icons; 
    TextView Titulos; 
    TextView Textos; 

    public HeroiViewHolder(View itemView) { 
     super(itemView); 
     cv = (CardView)itemView.findViewById(R.id.cv); 
     Icons = (ImageView)itemView.findViewById(R.id.Icons); 
     Titulos = (TextView)itemView.findViewById(R.id.Titulos); 
     Textos = (TextView)itemView.findViewById(R.id.Textos); 
    } 
} 

List<Heroi> herois; 

RVAdapter(List<Heroi> herois){ 
    this.herois=herois; 
} 

@Override 
public void onAttachedToRecyclerView(RecyclerView recyclerView){ 
    super.onAttachedToRecyclerView(recyclerView); 
} 

@Override 
public RVAdapter.HeroiViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
    View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item, viewGroup, false); 
    HeroiViewHolder hvh = new HeroiViewHolder(v); 
    return hvh; 
} 

@Override 
public void onBindViewHolder(HeroiViewHolder holder, int position) { 
    holder.Icons.setImageResource(herois.get(position).photoId); 
    holder.Titulos.setText(herois.get(position).tit); 
    holder.Textos.setText(herois.get(position).res); 
} 

@Override 
public int getItemCount() { 
    return herois.size(); 
} 
} 

クラス英雄

public class Heroi { 

int photoId; 
String tit; 
String res; 

public Heroi(int photoId, String tit, String res) { 
    this.photoId = photoId; 
    this.tit = tit; 
    this.res = res; 
} 
} 

事前に感謝します!ここで

+0

あなたは水平recyclerviewを作成しますか? – Jai

+0

いいえ、私は垂直にしたい – LionK

+0

私の答えを確認します – Jai

答えて

0

あなたは適切に行うために変更を以下行うことができます:あなたのonCreateView方法

private RVAdapter rvAdapter; 

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 
    //return inflater.inflate(R.layout.frag2,container,false); 
    View rootView = inflater.inflate(R.layout.card_ninja_info,container,false); 

    rv = (RecyclerView)rootView.findViewById(R.id.rv_frag1); 

    LinearLayoutManager llm = new LinearLayoutManager(getActivity()); 

    // Added here 
    llm.setOrientation(LinearLayoutManager.VERTICAL); 
    rv.setHasFixedSize(true); // Here we changed order you should call it first before setting LayoutManager 
    rv.setLayoutManager(llm);  

    //Set empty adapter and pass only context if you will needed inside it 
    rvAdapter = new RVAdapter(getActivity()); 
    rv.setAdapter(rvAdapter); 

    initializeData(); 
    initializeAdapter(); 

    return rootView; 
} 

2)

1更新)コンテンツリスト更新するために、あなたのアダプタクラスでメソッドを作成します

public void updateList(List<Heroi> herois){ 

    this.herois = herois; 
    notifyDataSetChanged(); 

} 

3)initializeAdapterメソッド内でcontentListを更新するだけです(もう一度アダプタを設定する必要はありません)

private void initializeAdapter(){ 

    rvAdapter.updateList(herois); 

} 

これだけです!

以下のとおりに、あなたのアダプタを更新します。

public class RVAdapter extends RecyclerView.Adapter<RVAdapter.HeroiViewHolder>{ 

List<Heroi> herois; 

public static class HeroiViewHolder extends RecyclerView.ViewHolder{ 

    CardView cv; 
    ImageView Icons; 
    TextView Titulos; 
    TextView Textos; 
    Context context; 


    public HeroiViewHolder(View itemView) { 
     super(itemView); 
     cv = (CardView)itemView.findViewById(R.id.cv); 
     Icons = (ImageView)itemView.findViewById(R.id.Icons); 
     Titulos = (TextView)itemView.findViewById(R.id.Titulos); 
     Textos = (TextView)itemView.findViewById(R.id.Textos); 
    } 
} 

RVAdapter(Context context){ 
    this.context = context; 
} 

@Override 
public void onAttachedToRecyclerView(RecyclerView recyclerView){ 
    super.onAttachedToRecyclerView(recyclerView); 
} 

@Override 
public RVAdapter.HeroiViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
    View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item, viewGroup, false); 
    HeroiViewHolder hvh = new HeroiViewHolder(v); 
    return hvh; 
} 

@Override 
public void onBindViewHolder(HeroiViewHolder holder, int position) { 
    holder.Icons.setImageResource(herois.get(position).photoId); 
    holder.Titulos.setText(herois.get(position).tit); 
    holder.Textos.setText(herois.get(position).res); 
} 

@Override 
public int getItemCount() { 
    return herois.size(); 
} 

public void updateList(List<Heroi> herois){ 

     this.herois = herois; 
     notifyDataSetChanged(); 

    } 

} 
+0

こんにちは、私はあなたが示唆した変更を加えましたが、残念ながら、私はここでエラーになりました: 'rvAdapter = new RVAdapter(getActivity());' 'rvAdapter =新しいRVAdapter((リスト)getActivity()); 'IDEの示唆したように私のアプリはまだ同じです:(最初のコンテンツを表示するだけです – LionK

+0

@LionK:あなたのアダプタコードで私の答えを更新しました。行く! – Jai

0

を問題は、私はちょうどRecyclerViewクラスを削除し、Fragment1クラスにそれをパットを解決しました。

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 
    // return inflater.inflate(R.layout.frag1,container,false); 
    View rootView = inflater.inflate(R.layout.frag1,container,false); 
    rv = (RecyclerView)rootView.findViewById(R.id.rv_frag1); 

    LinearLayoutManager llm = new LinearLayoutManager(getContext()); 
    // llm.setOrientation(LinearLayoutManager.VERTICAL); 
    // rv.setHasFixedSize(true); 
    rv.setLayoutManager(llm); 

    initializeData(); 

    rvAdapter = new RVAdapter(herois); 
    rv.setAdapter(rvAdapter); 

    return rootView; 
} 

おかげでとにかく

関連する問題