2015-05-05 20 views
2

我創建使用RecyclerView名單,我想,如果用戶觸摸在該列表中的項目,將用戶重定向到另一個activity .Noted,我有一個tablist。如何實現這一目標?這是我到目前爲止所嘗試過的。RecyclerView列表和意圖下一個活動的Android

  1. 類List適配器

公共類ListAdapter延伸RecyclerView.Adapter實現View.OnClickListener {

List<ListName> mItems; 
public ListAdapter(FragmentActivity c) { 
    super(); 
    mItems = new ArrayList<ListName>(); 

    ListName nature = new ListName(); 
    nature.setName("Jose Mourinho"); 
    nature.setDes("Chelsea Football Club"); 
    mItems.add(nature); 

    nature = new ListName(); 
    nature.setName("Louis van Gaal"); 
    nature.setDes("Manchester United"); 
    mItems.add(nature); 

    nature = new ListName(); 
    nature.setName("Arsene Wenger"); 
    nature.setDes("Arsenal"); 
    mItems.add(nature); 

    nature = new ListName(); 
    nature.setName("Manuel Pellegrini"); 
    nature.setDes("Manchester City"); 
    mItems.add(nature); 

    nature = new ListName(); 
    nature.setName("Brendan Rodgers"); 
    nature.setDes("Liverpool CF"); 
    mItems.add(nature); 
    } 
    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
    View v = LayoutInflater.from(viewGroup.getContext()) 
      .inflate(R.layout.recyler_view_list, viewGroup, false); 
    ViewHolder viewHolder = new ViewHolder(v); 
    return viewHolder; 
    } 
    @Override 
    public void onBindViewHolder(ViewHolder viewHolder, int i) { 
    ListName nature = mItems.get(i); 
    viewHolder.tvName.setText(nature.getName()); 
    viewHolder.tvDes.setText(nature.getDes()); 
    } 
    @Override 
    public int getItemCount() { 

    return mItems.size(); 
    } 

    @Override 
    public void onClick(View v) { 

    } 

    class ViewHolder extends RecyclerView.ViewHolder{ 

    public TextView tvName; 
    public TextView tvDes; 
    public ViewHolder(View itemView) { 
     super(itemView); 
     tvName = (TextView)itemView.findViewById(R.id.txtTitle); 
     tvDes = (TextView)itemView.findViewById(R.id.txtSubTitle); 
    } 
    } 

    } 
  • 類LISTNAME。這個類是用來設置和獲取名稱和描述

    public class ListName { 
        private String mName; 
        private String mDes; 
    
        public String getName() { 
        return mName; 
    } 
        public void setName(String name) { 
    this.mName = name; 
        } 
        public String getDes() { 
        return mDes; 
        } 
        public void setDes(String des) { 
        this.mDes = des; 
        } 
    
        } 
    
  • 類TAB1。這是Tab1的fragment類。

    public class Tab1 extends Fragment { 
    
    RecyclerView mRecyclerView; 
    RecyclerView.LayoutManager mLayoutManager; 
    RecyclerView.Adapter mAdapter; 
    
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
            Bundle savedInstanceState) { 
        final View view = inflater.inflate(R.layout.tab_1, container,  false); 
    final FragmentActivity c = getActivity(); 
    final RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.recycler_view); 
    LinearLayoutManager layoutManager = new LinearLayoutManager(c); 
    recyclerView.setLayoutManager(layoutManager); 
    
    new Thread(new Runnable() { 
        @Override 
        public void run() { 
         final ListAdapter adapter = new ListAdapter(c); 
         c.runOnUiThread(new Runnable() { 
          @Override 
          public void run() { 
           recyclerView.setAdapter(adapter); 
          } 
         }); 
        } 
    }).start(); 
    
    return view; 
    } 
    } 
    
  • 類ViewPagerAdapter。這個類是adapter製表符

    public class ViewPagerAdapter extends FragmentStatePagerAdapter { 
    
    CharSequence Titles[]; 
    int NumbOfTabs; 
    
    
    public ViewPagerAdapter(FragmentManager fm, CharSequence mTitles[], int mNumbOfTabsumb) { 
    super(fm); 
    
    this.Titles = mTitles; 
    this.NumbOfTabs = mNumbOfTabsumb; 
    
    } 
    
    @Override 
    public Fragment getItem(int position) { 
    
    if (position == 0) // if the position is 0 we are returning the First tab 
    { 
        Tab1 tab1 = new Tab1(); 
        return tab1; 
    } else    // As we are having 2 tabs if the position is now 0 it must be 1 so we are returning second tab 
    { 
        Tab2 tab2 = new Tab2(); 
        return tab2; 
    } 
    
    } 
    
    @Override 
    public CharSequence getPageTitle(int position) { 
        return Titles[position]; 
    } 
    

    //此方法返回標籤的標籤數條

    @Override 
    public int getCount() { 
        return NumbOfTabs; 
    } 
    } 
    
  • 回答

    4

    把你ItemView控件一個setOnClickListener在Viewholder和編寫代碼轉到另一個活動(intent)

    class ViewHolder extends RecyclerView.ViewHolder 
    { 
    
    public TextView tvName; 
    public TextView tvDes; 
    
        public ViewHolder(View itemView) 
        { 
         super(itemView); 
         tvName = (TextView)itemView.findViewById(R.id.txtTitle); 
         tvDes = (TextView)itemView.findViewById(R.id.txtSubTitle); 
    
         itemView..setOnClickListener(new View.OnClickListener() 
          { 
           @Override 
           public void onClick(View v) 
           { 
            Intent intent = new Intent(getActivity().getApplicationContext(), ActivityName.class); 
            startActivity(intent); //or startActivityForResult(REQUEST, intent); 
           } 
          }); 
    
        } 
    } 
    
    +0

    我在getActivity()中有錯誤getApplicationContext和startActivit Y(意圖)。這是因爲它無法解析getActivity和startActivity。如何解決它?謝謝 – chemat92

    +0

    它的getActivity()。getApplicationContext()與括號..(或者,也許你可以嘗試ActivityName.this代替) 和通常解決startActivity不應該給問題 –

    +0

    我已經嘗試過,但它仍然顯示錯誤'無法解析方法getActivity()'有沒有我沒有應用的東西? – chemat92

    相關問題