2017-03-04 6 views
0

自動スクロールRecyclerViewアイテム最後の位置に?私はこのコードをしようとしている

public class ping : SupportFragment 
{ 
View view; 
RecyclerView mRecyclerView; 
RecyclerView.LayoutManager mLayoutManager; 
RecyclerView.Adapter mAdapter; 
public List<data> mdata; 
int i = 0; 


public override void OnCreate(Bundle savedInstanceState) 
{ 
    base.OnCreate(savedInstanceState); 
} 

public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{ 
    view = inflater.Inflate(Resource.Layout.ping, container, false); 
    mRecyclerView = view.FindViewById<RecyclerView>(Resource.Id.recyclerview_ping); 
    mLayoutManager = new LinearLayoutManager(Activity); 
    mRecyclerView.SetLayoutManager(mLayoutManager); 
    mdata = new List<data>(); 
    mAdapter = new RecyclerAdapter(mdata,mRecyclerView); 
    mRecyclerView.SetAdapter(mAdapter); 
    mRecyclerView.SetItemClickListener((rv, position, view) => 
    { 
     //An item has been clicked 
     Toast.MakeText(mRecyclerView.Context, mdata[position].sekuenca, ToastLength.Long).Show(); 

    }); 
    Task.Run(() => add_data()); 

    return view; 
} 

public void add_data() 
{ 
    fillimi: 
    Activity.RunOnUiThread(() => 
    { 
     i = i + 1; 
     string sekuena = i.ToString(); 
     mdata.Add(new data() { titulli = "From : eakteam.com", sekuenca = "Secuenca : " + sekuena, madhesia = "Send : 64 Bytes", koha = "Time : 45 ms" }); 
     mAdapter.NotifyItemInserted(mdata.Count()); 
     mRecyclerView.SmoothScrollToPosition(mdata.Count()); 
    }); 

    Thread.Sleep(2000); 
    goto fillimi; 
} 
public class data 
{ 
    public string titulli { get; set; } 
    public string sekuenca { get; set; } 
    public string madhesia { get; set; } 
    public string koha { get; set; } 
} 
public class RecyclerAdapter : RecyclerView.Adapter 
{ 
    private List<data> mdata; 
    private RecyclerView mRecyclerView; 
    public RecyclerAdapter(List<data> data, RecyclerView recyclerView) 
    { 
     mdata = data; 
     mRecyclerView = recyclerView; 
    } 
    public class MyView : RecyclerView.ViewHolder 
    { 
     public View mMainView { get; set; } 
     public TextView mtitulli { get; set; } 
     public TextView msekuenca { get; set; } 
     public TextView mmadhesia { get; set; } 
     public TextView mkoha { get; set; } 

     public MyView(View view) : base(view) 
     { 
      mMainView = view; 
     } 
    } 
    public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType) 
    { 
     View row = LayoutInflater.From(parent.Context).Inflate(Resource.Layout.ping_lista, parent, false); 

     TextView txtTitulli = row.FindViewById<TextView> (Resource.Id.titulli); 
     TextView txt1 = row.FindViewById<TextView>(Resource.Id.txt1); 
     TextView txt2 = row.FindViewById<TextView>(Resource.Id.txt2); 
     TextView txt3 = row.FindViewById<TextView>(Resource.Id.txt3); 

     MyView view = new MyView(row) { mtitulli = txtTitulli, msekuenca = txt1, mmadhesia = txt2, mkoha = txt3 }; 
     return view; 
    } 
    public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position) 
    { 
     MyView mHolder = holder as MyView; 
     int indexPosition = (mdata.Count - 1) - position; 
     mHolder.mtitulli.Text = mdata[position].titulli; 
     mHolder.msekuenca.Text = mdata[position].sekuenca; 
     mHolder.mmadhesia.Text = mdata[position].madhesia; 
     mHolder.mkoha.Text = mdata[position].koha; 
    } 
    public override int ItemCount 
    { 
     get { return mdata.Count; } 
    } 
    public override long GetItemId(int position) 
    { 
     return base.GetItemId(position); 
    } 
} 
} 

XAMLのレイアウトは次のとおりです。

?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <LinearLayout 
     android:id="@+id/linear_device" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:orientation="horizontal" 
     > 
     <Button 
      android:text="Add Device" 
      android:layout_width="206.0dp" 
      android:layout_height="43.3dp" 
      android:id="@+id/button_device_vazhdo" 
      android:layout_gravity="center" 
      android:layout_marginStart="10dp" 
      android:layout_marginRight="10dp" 
      android:layout_marginBottom="10dp" 
      android:background="@android:color/holo_green_dark" /> 
    </LinearLayout> 
    <LinearLayout 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <android.support.v7.widget.RecyclerView 
    android:id="@+id/recyclerview_ping" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:scrollbars="vertical" 
    /> 
    </LinearLayout> 
</LinearLayout> 

この作業を行うには?私は多くのことに挑戦していました。そして、私は別の問題を抱えています:

mAdapter.NotifyItemInserted(mdata.Count()); 〜mAdapter.NotifyItemInserted(0);アイテムをリサイクルビューのトップに表示するには、アイテムを重複させ、新しいアイテムを表示しないでください。事前に

おかげで

+0

あなたが使用する必要がありますようですね[setStackFromEnd()メソッド](https://developer.android.com/reference/android/support/v7/widget/LinearLayoutManager.html#をお試しくださいsetStackFromEnd(boolean))または同等の[app:stackFromEnd](https://developer.android.com/reference/android/support/v7/widget/LinearLayoutManager.html#attr_android.support.v7.recyclerview:stackFromEnd)をクリックします。 – ianhanniballake

+0

例を挙げてください。 –

答えて

0

アダプタ位置がmAdapter.NotifyItemInserted(mdata.Count()-1)

に0から始まるインデックス

変更mAdapter.NotifyItemInserted(mdata.Count()) でまだmRecyclerView.SmoothScrollToPosition(mdata.Count())も 変更を動作していない場合は、自動的に最後の項目

にスクロールする必要があります〜 mRecyclerView.SmoothScrollToPosition(mdata.Count()-1)

+0

私はそれを試み、動作していません。とにかくスクロールするだけでデータを複製するだけで、新しい項目は表示されません。とにかくありがとう。 p.s:アップスクロールしないでアップスクロールする –

0

この

recyclerView.smoothScrollToPosition(data.size()-1); 
関連する問題