0

こんばんは私の友人アンドロイドTabLayoutとViewPagerは、位置のクリックアイテム

を取得し、私はこのチュートリアルhttp://www.journaldev.com/12958/android-tablayout-viewpager#comment-37790を行なったし、everythinkは大丈夫でした。 これで、click to listViewに関数を追加し、項目をクリックするとその位置を取得します。私を助けてください。

これは、これがMainActivity

public class ViewPagerAdapter extends FragmentPagerAdapter { 

    public ViewPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     Fragment fragment = null; 
     if (position == 0) 
     { 
      fragment = new FragmentA(); 
     } 
     else if (position == 1) 
     { 
      fragment = new FragmentB(); 
     } 
     else if (position == 2) 
     { 
      fragment = new FragmentC(); 
     } 
     return fragment; 
    } 

    @Override 
    public int getCount() { 
     return 3; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     String title = null; 
     if (position == 0) 
     { 
      title = "Tab-1"; 
     } 
     else if (position == 1) 
     { 
      title = "Tab-2"; 
     } 
     else if (position == 2) 
     { 
      title = "Tab-3"; 
     } 
     return title; 
    } 
} 

にこのfragment_list.xml

<?xml version="1.0" encoding="utf-8"?> 

<ListView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/list"/> 

このFragmentA

あるViewPagerあるfactivity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    tools:context="com.journaldev.tablayoutviewpager.MainActivity"> 

    <android.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/AppTheme.AppBarOverlay"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="?attr/colorPrimary" 
      app:layout_scrollFlags="scroll|enterAlways" 
      app:popupTheme="@style/AppTheme.PopupOverlay" /> 

     <android.support.design.widget.TabLayout 
      android:id="@+id/tabs" 
      style="@style/MyStyle" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      app:tabGravity="fill" 
      app:tabMode="fixed" /> 

    </android.support.design.widget.AppBarLayout> 


    <android.support.v4.view.ViewPager 
     android:id="@+id/viewPager" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 


    <android.support.design.widget.FloatingActionButton 
     android:id="@+id/fab" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="bottom|end" 
     android:layout_margin="@dimen/fab_margin" 
     android:src="@android:drawable/ic_dialog_email" /> 

</android.support.design.widget.CoordinatorLayout> 

あります

このはCustomAdapter.java

public class CustomAdapter extends ArrayAdapter { 

    private ArrayList dataSet; 
    Context mContext; 

    // View lookup cache 
    private static class ViewHolder { 
     TextView txtName; 

    } 

    public CustomAdapter(ArrayList data, Context context) { 
     super(context, R.layout.row_item, data); 
     this.dataSet = data; 
     this.mContext = context; 

    } 

    @Nullable 
    @Override 
    public String getItem(int position) { 
     return dataSet.get(position); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     ViewHolder viewHolder; // view lookup cache stored in tag 

     if (convertView == null) { 

      viewHolder = new ViewHolder(); 
      LayoutInflater inflater = LayoutInflater.from(getContext()); 
      convertView = inflater.inflate(R.layout.row_item, parent, false); 
      viewHolder.txtName = (TextView) convertView.findViewById(R.id.name); 
      convertView.setTag(viewHolder); 
     } else { 
      viewHolder = (ViewHolder) convertView.getTag(); 
     } 

     viewHolder.txtName.setText(getItem(position)); 
     // Return the completed view to render on screen 
     return convertView; 
    } 
} 

MainActivity.javaクラス

public class CustomAdapter extends ArrayAdapter { 

    private ArrayList dataSet; 
    Context mContext; 

    // View lookup cache 
    private static class ViewHolder { 
     TextView txtName; 

    } 

    public CustomAdapter(ArrayList data, Context context) { 
     super(context, R.layout.row_item, data); 
     this.dataSet = data; 
     this.mContext = context; 

    } 

    @Nullable 
    @Override 
    public String getItem(int position) { 
     return dataSet.get(position); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     ViewHolder viewHolder; // view lookup cache stored in tag 

     if (convertView == null) { 

      viewHolder = new ViewHolder(); 
      LayoutInflater inflater = LayoutInflater.from(getContext()); 
      convertView = inflater.inflate(R.layout.row_item, parent, false); 
      viewHolder.txtName = (TextView) convertView.findViewById(R.id.name); 
      convertView.setTag(viewHolder); 
     } else { 
      viewHolder = (ViewHolder) convertView.getTag(); 
     } 

     viewHolder.txtName.setText(getItem(position)); 
     // Return the completed view to render on screen 
     return convertView; 
    } 
} 

答えて

0

断片で
RecyclerViewAdapterアダプタ=新しいRecyclerViewAdapter(アイテム、本)です。

アダプタ内

public class RecyclerViewAdapter extends RecyclerView.Adapter { 

String[] items; 
private final OnItemClickListener listener; 

public interface OnItemClickListener { 

    void onItemClick(int item); 

    } 


public RecyclerViewAdapter(String[] items) { 
    this.items = items; 
} 

@Override 
public TextItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_view_list_item, parent, false); 
    return new TextItemViewHolder(view); 
} 

@Override 
public void onBindViewHolder(TextItemViewHolder holder, int position) { 
    holder.bind(items[position]); 
    holder.textview.setOnClickListener(new View.OnClickListener() { 

     @Override public void onClick(View v) { 

      listener.onItemClick(position); 

    } 

}); 

} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

@Override 
public int getItemCount() { 
    return items.length; 
} 

}

フラグメント

`

public class FragmentA extends Fragment implement RecyclerViewAdapter.OnItemClickListener { 

    ... 
@Override 
void onItemClick(int item){ 

    //perform your action 
    } 
} 

}

+0

私は知っているかもしれませんが、チュートリアルに別の解決策が必要かもしれません。私はすでにその機能を果たしていました。チュートリアルをチェックできますか? –

+0

あなたのコードを投稿することができます – Justcurious

+0

あなたはアダプタにインターフェイスを追加して、アイテムの位置を得るためにフラグメントで実装する必要があります – Justcurious

0

で私はチュートリアルを完全に熟知していませんが、あなたはこれに似た何かを持っているべきです。

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
    int position1 = position;} 
    }); 

私のTabLayoutには断片があり、このコードは私の断片であり、ListViewデータを設定しています。

+0

私は知っているかもしれませんが多分チュートリアルには別の解決策が必要です。私はすでにその機能を果たしていました。チュートリアルをチェックできますか? –

+0

私は彼が別の方法でリストビューを作成すると思います。 –

+0

私のソリューションは、フラグメント内のonViewCreatedメソッドの内側に貼り付けると機能しますか?あなたのrecyclerViewのために自分のコードからlistViewを置き換えます。うまくいけば、私のコードからAdapterViewも変更する必要があります。それがうまくいくことを望みます。 –

0

はまず、

public interface ClickListener { 
    void itemlistener(int position); 
} 

インターフェイスを作成する第二に、あなたのリサイクルビューアダプタへのインタフェースを置きます。

public class RecyclerViewAdapter extends RecyclerView.Adapter { 

    String[] items; 
    ClickListener clicklistener; 

    public RecyclerViewAdapter(String[] items,Clicklistener clicklistener) { 
     this.items = items; 
     this.clicklistener = clicklistener; 
    } 

    ............ 
} 

はその後、onClickListenerであなたのビューホルダーにインタフェース機能を使用します。

public class TextItemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 
    private TextView textView; 


    public TextItemViewHolder(View itemView) { 
     super(itemView); 
     textView = (TextView) itemView.findViewById(R.id.list_item); 
     itemView.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View view) { 
     clicklistener.itemlistener(getAdapterPosition());  
    } 
} 

次に、あなたのフラグメントのインターフェイスを実装します。インタフェース内のメソッドをオーバーライドします。次にポジションRecyclerViewアダプタから取得します。

public class FragmentA extends Fragment implements ClickListener{ 

    RecyclerView recyclerView; 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View rootView = inflater.inflate(
       R.layout.fragment, container, false); 
     return rootView; 
    } 

    @Override 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 

     String[] items = getResources().getStringArray(R.array.tab_A); 
     RecyclerViewAdapter adapter = new RecyclerViewAdapter(items, this); 
     recyclerView = (RecyclerView) view.findViewById(R.id.recycler_view); 
     LinearLayoutManager layoutManager = new LinearLayoutManager(getContext()); 
     recyclerView.setLayoutManager(layoutManager); 
     recyclerView.setAdapter(adapter); 

    } 

    @Override 
     public void itemlistener(int position) { 
     Toast.makeText(this, "RecyclerView position is: " + position, Toast.LENGTH_SHORT).show(); 
    } 
} 

これはそれです。

+0

私はしましたが、私にエラーを与えました。 –

+0

@Override public void onClick(表示ビュー){ clicklistener.itemlistener(getAdapterPosition()); } ビュー所有者でクリックリスナーエラーが発生しました –

+0

メールをお送りしていますか?エラーをチェックするために自分のコードを送信しますか? –

関連する問題