Как автоматически прокрутить recyclerview до последней позиции элемента ? в Xamarin.андроид
Мой код таков, но не работает :
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-ЭТО :
<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.Граф ()); к мадаптеру.NotifyItemInserted(0); чтобы сделать элементы обезьянничающими на вершине recyclerview, просто дублируйте элемент и не помещайте новый элемент в поле зрения.
Заранее спасибо
Что я уже пробовал:
mAdapter.NotifyItemInserted(mdata.Count() -1); mRecyclerView.SmoothScrollToPosition(mdata.Count() -1);
Это не должно быть сделано с помощью "reverseLayout"
Graeme_Grant
Вы задавали этот вопрос в Форумы Android-Xamarin[^]?
Emin Kokalari
Да, но решения пока нет ... я подумал, может быть, найду здесь какое-нибудь решение.