Как отобразить позицию Auto Scrolling RecyclerView в TextView? - PullRequest
0 голосов
/ 26 мая 2019

Я делаю приложение, которое автоматически прокручивает изображения, в нижней части экрана есть статический макет, который мне нужен, чтобы отобразить значение изображений, которые уже прошли (то есть положение).

Я получаю правильное значение изображений, переданных путем реализации: int position = holder.getAdapterPosition(); в RecyclerViewListAdapter.java теперь мне нужно отобразить это значение в RecyclerViewListActivity.java в текстовом представлении в статическом макете под представлением Recycler?

открытый класс RecyclerViewListAdapter расширяет RecyclerView.Adapter {

Context context;
List<Data> dataList;
private SharedPreferences preferences;

public RecyclerViewListAdapter(Context context, List<Data> dataList) {
    this.context = context;
    this.dataList = dataList;
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter_recycler_list, parent, false);
    return new MyViewHolder(itemView);
}

@Override

public void onBindViewHolder(final MyViewHolder holder,  final int position) {
    holder.mImage.setImageResource(dataList.get(position).getImage());
    holder.mImage.setImageResource(dataList.get(position).getImage());

    **int position = holder.getAdapterPosition();**

}


@Override
public int getItemCount() {

    if (dataList == null || dataList.size() == 0)
        return 0;
    return dataList.size();
}

public class MyViewHolder extends RecyclerView.ViewHolder {

    TextView mNumberText,mText;
    ImageView mImage;
    LinearLayout mLinearLayout;

    public MyViewHolder(View itemView) {
        super(itemView);
        mImage = (ImageView) itemView.findViewById(R.id.quran_page);
        mLinearLayout = (LinearLayout) itemView.findViewById(R.id.linearLayout);

    }
}

}


открытый класс RecyclerViewListActivity расширяет AppCompatActivity {

RecyclerView mListRecyclerView;
ArrayList<Data> dataArrayList;
RecyclerViewListAdapter recyclerViewListAdapter ;

Runnable updater;

private boolean isTouch = false;

TextViewRemaining;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_recycler_view_list);

    final TextView TextViewRemaining = (TextView) findViewById(R.id.TextViewRemaining);


    **TextViewRemaining.setText("Position: "+position);**

    initializeView();

    mListRecyclerView.addOnItemTouchListener(new RecyclerTouchListener(this,
            mListRecyclerView, new ClickListener() {
        @Override
        public void onClick(View view, int position) {

       }

        @Override
        public void onLongClick(View view, int position) {
            Toast.makeText(RecyclerViewListActivity.this, "Long press on position :" + position,
                    Toast.LENGTH_LONG).show();
           }
    }));
}



@Override
public boolean onCreateOptionsMenu(Menu menu) {
            return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    int id = item.getItemId();

    return super.onOptionsItemSelected(item);
}


public static interface ClickListener{
    public void onClick(View view,int position);
    public void onLongClick(View view,int position);
}


class RecyclerTouchListener implements RecyclerView.OnItemTouchListener{

    private ClickListener clicklistener;
    private GestureDetector gestureDetector;

    //@RequiresApi(api = Build.VERSION_CODES.CUPCAKE)
    public RecyclerTouchListener(Context context, final RecyclerView recycleView, final ClickListener clicklistener){

        this.clicklistener=clicklistener;
        gestureDetector=new GestureDetector(context,new GestureDetector.SimpleOnGestureListener(){
            @Override
            public boolean onSingleTapUp(MotionEvent e) {
                return true;
            }

            @Override
            public void onLongPress(MotionEvent e) {
                View child=recycleView.findChildViewUnder(e.getX(),e.getY());
                if(child!=null && clicklistener!=null){
                    clicklistener.onLongClick(child,recycleView.getChildAdapterPosition(child));
                }
            }
        });
    }

    @Override
    public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
        View child=rv.findChildViewUnder(e.getX(),e.getY());
        if(child!=null && clicklistener!=null && gestureDetector.onTouchEvent(e)){
            clicklistener.onClick(child,rv.getChildAdapterPosition(child));
        }

        return false;
    }

    @Override
    public void onTouchEvent(RecyclerView rv, MotionEvent e) {

    }

    @Override
    public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

    }
}



private void initializeView()
{

    mListRecyclerView = (RecyclerView) findViewById(R.id.vR_recyclerViewList);

    setValues();
}



private void setValues(){
    prepareData();

    recyclerViewListAdapter = new RecyclerViewListAdapter(RecyclerViewListActivity.this,dataArrayList);
    mListRecyclerView.setLayoutManager(new LinearLayoutManager(RecyclerViewListActivity.this)); // original
    mListRecyclerView.setItemAnimator(new DefaultItemAnimator());
    mListRecyclerView.setHasFixedSize(false);

    mListRecyclerView.setAdapter(recyclerViewListAdapter);
    recyclerViewListAdapter.notifyDataSetChanged();

    final int speedScroll = 2000; //default is 2000 it need to be 30000
    final Handler handler = new Handler();
    final Runnable runnable = new Runnable() {

        int count = 0;
        // boolean flag = true;
        @Override
        public void run() {

            boolean x=true;
            //  while(x) {
            if (count < recyclerViewListAdapter.getItemCount()) {
                if (count == recyclerViewListAdapter.getItemCount() - 1) {
                    flag = false;
                } else if (count == 0) {
                    flag = true;
                }


            }
            if (flag) count++;
            // else count--;

            mListRecyclerView.smoothScrollToPosition(count);


            handler.postDelayed(this, speedScroll);

        }

    };

    handler.postDelayed(runnable,speedScroll);

}


private void prepareData(){
    dataArrayList = new ArrayList<>();

    Data data1 = new Data();
    data1.setImage(R.drawable.p1);
    dataArrayList.add(data1);

    Data data2 = new Data();
    data2.setImage(R.drawable.p2);
    dataArrayList.add(data2);

    Data data3 = new Data();
    data3.setImage(R.drawable.p3);
    dataArrayList.add(data3);

    Data data4 = new Data();
    data4.setImage(R.drawable.p4);
    dataArrayList.add(data4);

    Data data5 = new Data();
    data5.setImage(R.drawable.p5);
    dataArrayList.add(data5);


}

}

Итак, как я могу показать значение позиции в textView в режиме реального времени, так как позиция является динамическим значением, я ожидаю, что выходные данные в textView изменятся при передаче изображений в верхнюю часть.

Заранее большое спасибо.

1 Ответ

0 голосов
/ 10 июня 2019

Вот как я решаю свою проблему: Я сохраняю значение позиции в предпочтениях Power (более простая версия общих настроек) - благодаря: Али Асади (https://android.jlelse.eu/powerpreference-a-simple-approach-to-store-data-in-android-a2dad4ddc4ac) Я использую тему, которая обновляет текстовое представление каждую секунду, благодаря: https://www.youtube.com/watch?v=6sBqeoioCHE&t=149s Спасибо за все.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...