close
تبلیغات در اینترنت
recycler view,آموزش استفاده از recycler view,کد recycler view,پروژه re
صفحه اصلی پرشین استک

{ پرشین استک }

به دنیای برنامه نویسی خوش آمدید
|


پرشین استک تنها یک سایت نیست بلکه یک پروژه همگانی می باشد


تعداد مطالب :
142


تعداد توسعه دهندگان :
11


تاریخ امروز :
جمعه 29 تیر 1397

به کانال تلگرام ما بپیوندید


×

لیست سوالات من

افزودن

چگونه می توان در اندروید ارتفاع item view های Recycler view را ، با کلیک بر روی item view تغییر داد ؟

من یک fragment با یک search view دارم و همچنین یک recycler view که می توانید یک item را در یک زمان انتخاب کنید . ارتفاع item ممکن است بسته به محتوای نمایش داده شده متفاوت باشد . زمانی که روی یکی از item های recycler view کلیک می شود ، من رنگ پس زمینه آن item را تغییر می دهم و سپس item انتخاب شده را در یک متغیر برای استفاده بعدی ذخیره می کنم . با این حال ، هنگامی که item انتخاب شده است ، ارتفاع آن نیز به طور چشمگیری تغییر می کند . مثل اینکه جزئیات item به طور غیر مستقیم فرو می ریزد یا مصرف می شود . من فکر می کنم این کار با استفاده مجدد از سلول انجام می شود .

این ویدئو مشکل را نشان می دهد . 

این کلاس adapter من است :

 

public class CodeListAdapter extends RecyclerView.Adapter<CodeListAdapter.ViewHolder>{

private List<Code> codes;
private Code selectedCode;
private int selectedPosition = -1;

public CodeListAdapter(Code selectedCode){
this.selectedCode = selectedCode;
}

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

@Override
public void onBindViewHolder(ViewHolder holder,int position){
Code code = codes.get(position);
holder.codeIdentifier.setText(code.getCodeIdentifier());

if (code.getCodeType() == null || code.getCodeType().isEmpty()){
holder.codeType.setVisibility(View.GONE);
}else{
holder.codeType.setText(code.getCodeType());
}

if (code.getCodeDescription() == null || code.getCodeDescription().isEmpty()){
holder.codeDescription.setVisibility(View.GONE);
}else{
holder.codeDescription.setText(code.getCodeDescription());
}

if (selectedCode == code){
holder.itemLayout.setBackgroundResource(R.color.colorEmphasis);
}else{
holder.itemLayout.setBackgroundResource(R.color.colorWhite);
}

final ViewHolder viewHolder = holder;
holder.itemLayout.setOnClickListener(newView.OnClickListener(){
@Override
public void onClick(View itemView){
int currentPosition = viewHolder.getAdapterPosition();
if (currentPosition != selectedPosition){
selectedCode = codes.get(currentPosition);
notifyItemChanged(selectedPosition);
selectedPosition = currentPosition;
notifyItemChanged(selectedPosition);
}
}
});
}

@Override
public int getItemCount(){
return codes.size();
}

public void setCodes(List<Code> codes){
this.codes = codes;
}

public Code getCode(){
return selectedCode;
}

static class ViewHolder extends RecyclerView.ViewHolder{
View itemLayout;
TextView codeIdentifier;
TextView codeType;
TextView codeDescription;

ViewHolder(View view){
super(view);
itemLayout = view.findViewById(R.id.item_layout);
codeIdentifier = (TextView) view.findViewById(R.id.codeIdentifier);
codeType = (TextView) view.findViewById(R.id.codeType);
codeDescription = (TextView) view.findViewById(R.id.codeDescription);
}
}
}

 

 

فایل item Layout ها :

 

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/black75PercentColor"
android:paddingBottom="1dp">

<RelativeLayout
android:id="@+id/item_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:paddingBottom="6dp"
android:paddingEnd="12dp"
android:paddingStart="12dp"
android:paddingTop="6dp">

<TextView
android:id="@+id/codeIdentifier"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"/>

<TextView
android:id="@+id/codeType"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/codeIdentifier"/>

<TextView
android:id="@+id/codeDescription"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/codeType"/>
</RelativeLayout>
</FrameLayout>

 

 

کد فایل Layout :

 

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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">

<SearchView
android:id="@+id/searchView"
android:layout_width="match_parent"
android:layout_height="50dp"
android:queryHint="@string/key_search_code"/>

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:background="@color/colorPrimary"
android:paddingEnd="12dp"
android:paddingStart="12dp">

<TextView
android:id="@+id/headerTextView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:text="Codes"
android:textColor="@color/white"
android:textSize="20sp"/>

</RelativeLayout>

<mdbilling.ca.mdbilling_android.Customs.ExtendedRecyclerView
android:id="@+id/diagnosticCodeRecyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

<RelativeLayout
android:id="@android:id/empty"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:gravity="center"
android:paddingEnd="12dp"
android:paddingStart="12dp">

<TextView
android:id="@+id/messageHeader"
style="?android:attr/textAppearanceLarge"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAlignment="center"/>

<TextView
android:id="@+id/messageBody"
style="?android:attr/textAppearanceMedium"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/messageHeader"
android:layout_marginTop="6dp"
android:textAlignment="center"/>
</RelativeLayout>

</LinearLayout>

 

 

Customs.ExtendedRecyclerView در اینجا چیزی نیست جز یک توسعه از recycler view که توانایی نمایش ویو @android:id/empty را زمانی که dataset در adapter خالی است ، دارد .

 

پاسخ 1 :

کد MainActivity :

 

package info.androidhive.recyclerview;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity{
private List<Movie> movieList = new ArrayList<>();
private RecyclerView recyclerView;
private MoviesAdapter mAdapter;

@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

recyclerView = (RecyclerView) findViewById(R.id.recycler_view);

mAdapter = new MoviesAdapter(movieList);

recyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
recyclerView.setLayoutManager(mLayoutManager);
recyclerView.addItemDecoration(new DividerItemDecoration(this,LinearLayoutManager.VERTICAL));
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(mAdapter);


recyclerView.addOnItemTouchListener(new RecyclerTouchListener(getApplicationContext(), recyclerView,new RecyclerTouchListener.ClickListener(){
@Override
public void onClick(View view,int position){
Movie movie = movieList.get(position);
Toast.makeText(getApplicationContext(), movie.getTitle()+" is selected!",Toast.LENGTH_SHORT).show();
}


@Override
public void onLongClick(View view,int position){
}
}));

prepareMovieData();
}

private void prepareMovieData(){
Movie movie = new Movie("Mad Max: Fury Road","Action & Adventure","2015");
movieList.add(movie);

movie = new Movie("Inside Out","Animation, Kids & Family","2015");
movieList.add(movie);

movie = new Movie("Star Wars: Episode VII - The Force Awakens","Action","2015");
movieList.add(movie);

movie = new Movie("Shaun the Sheep","Animation","2015");
movieList.add(movie);

movie = new Movie("The Martian","Science Fiction & Fantasy","2015");
movieList.add(movie);

movie = new Movie("Mission: Impossible Rogue Nation","Action","2015");
movieList.add(movie);

movie = new Movie("Up","Animation","2009");
movieList.add(movie);

movie = new Movie("Star Trek","Science Fiction","2009");
movieList.add(movie);


movie = new Movie("The LEGO Movie","Animation","2014");
movieList.add(movie);

movie = new Movie("Iron Man","Action & Adventure","2008");
movieList.add(movie);

movie = new Movie("Aliens","Science Fiction","1986");
movieList.add(movie);

movie = new Movie("Chicken Run","Animation","2000");
movieList.add(movie);

movie = new Movie("Back to the Future","Science Fiction","1985");
movieList.add(movie);

movie = new Movie("Raiders of the Lost Ark","Action & Adventure","1981");
movieList.add(movie);

movie = new Movie("Goldfinger","Action & Adventure","1965");
movieList.add(movie);

movie = new Movie("Guardians of the Galaxy","Science Fiction & Fantasy","2014");
movieList.add(movie);

mAdapter.notifyDataSetChanged();
}

}

 

کد adapter :

 

package info.androidhive.recyclerview;

import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import java.util.List;

public class MoviesAdapter extends RecyclerView.Adapter<MoviesAdapter.MyViewHolder>{

private List<Movie> moviesList;
private Movie selectedMovie;
private int lastSelectedPosition = -1;

public class MyViewHolder extends RecyclerView.ViewHolder{
public TextView title, year, genre, desc;

public MyViewHolder(View view){
super(view);
title = (TextView) view.findViewById(R.id.title);
genre = (TextView) view.findViewById(R.id.genre);
year = (TextView) view.findViewById(R.id.year);
desc = (TextView) view.findViewById(R.id.desc);
}
}

public MoviesAdapter(List<Movie> moviesList){
this.moviesList = moviesList;
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent,int viewType){
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.movie_list_row, parent,false);

return new MyViewHolder(itemView);
}

@Override
public void onBindViewHolder(MyViewHolder holder,int position){
Movie movie = moviesList.get(position);
holder.title.setText(movie.getTitle());
holder.genre.setText(movie.getGenre());
holder.year.setText(movie.getYear());
holder.desc.setText(movie.getGenre()+ movie.getGenre()+ movie.getGenre()+ movie.getGenre()+ movie.getGenre()+ movie.getGenre()+ movie.getGenre());

if (selectedMovie == movie){
holder.itemView.setBackgroundResource(R.color.colorEmphasis);
}else{
holder.itemView.setBackgroundResource(R.color.colorWhite);
}

final RecyclerView.ViewHolder viewHolder = holder;
holder.itemView.setOnClickListener(newView.OnClickListener(){
@Override
public void onClick(View itemView){
int currentPosition = viewHolder.getAdapterPosition();
if (currentPosition != lastSelectedPosition){
selectedMovie = moviesList.get(currentPosition);
notifyItemChanged(lastSelectedPosition);
lastSelectedPosition = currentPosition;
notifyItemChanged(lastSelectedPosition);
}
}
});
}

@Override
public int getItemCount(){
return moviesList.size();
}
}

 

 

Row layout :

 

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="true"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="10dp"
android:paddingBottom="10dp"
android:clickable="true"
android:background="?android:attr/selectableItemBackground"
android:orientation="vertical">

<TextView
android:id="@+id/title"
android:textColor="@color/title"
android:textSize="16dp"
android:textStyle="bold"
android:layout_alignParentTop="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>

<TextView
android:id="@+id/genre"
android:layout_below="@id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>

<TextView
android:id="@+id/year"
android:textColor="@color/year"
android:layout_width="wrap_content"
android:layout_alignParentRight="true"
android:layout_height="wrap_content"/>

<TextView
android:id="@+id/desc"
android:textColor="@color/year"
android:layout_width="match_parent"
android:layout_alignTop="@+id/genre"
android:layout_height="wrap_content"/>

</RelativeLayout>

 

این ویدئو می تواند به شما کمک کند .

سورس کد را می توانید به صورت فایل فشرده شده (Zip.) دانلود کنید .

 

پاسخ 2 :

شما باید click listener مربوط به view را در کلاس ViewHolder تنظیم کنید .

 

صفحه اصلی

35

03 / 06 / 1396

PERSIAN STACK


چرا گاهی اوقات API موقعیت مکانی سرویس گوگل پلی ، موقعیت مکانی اشتباهی را برمی گرداند ؟

ادامه مطلب

613

چگونه نرم افزار ضبط صدای اندرویدی بسازیم ؟

ادامه مطلب

549

چرا TextView کلمات را با حروف می شکند ؟

ادامه مطلب

497

دانلود تمامی API های اندروید

ادامه مطلب

433

قسمت شانزدهم - جدول ها در HTML

ادامه مطلب

419

چرا وبسایت تجارت الکترونیک Magento 2 در Webview اندروید کار نمی کند ؟

ادامه مطلب

363

دانلود پروژه نمایش جستجوی کتاب برای اندروید

ادامه مطلب

347

چگونه Google API برای سطح API 25 را پیدا کنیم ؟

ادامه مطلب

343

دانلود سورس کد بازی اندرویدی Klooni 1010! + فایل APK

ادامه مطلب

259

آیا راهی برای یافتن تغیرات ماه در نمای تقویم اندروید (calendar view) وجود دارد ؟

ادامه مطلب

243

در تکمیل خودکار اندروید ، دلیل dispatchProvideAutofillStructure() not laid out چیست ؟

ادامه مطلب

231

چرا زمانی که با استفاده از cordova در اندروید 7.0 ، اس ام اس ارسال می کنیم ، با اثتثنای (Exception) امنیتی مواج

ادامه مطلب

227

آموزش ساخت و شخصی سازی Navigation Drawer در اندروید استودیو

ادامه مطلب

211

دانلود تمامی نسخه های gradle برای اندروید

ادامه مطلب

195

دانلود سورس کد اپلیکیشن هواشناسی برای اندروید + فایل APK

ادامه مطلب

179

چگونه ارور com.bumptech.glide.Registry$NoModelLoaderAvailableException: Failed to find any ModelLoaders را در اندروید رفع کنیم ؟

ادامه مطلب

171

دانلود اسکریپت جاوای PS-CH# - ایجاد ورودی متنی پیشرفته

ادامه مطلب

121

دانلود کتابخانه Retrofit برای اندروید + پروژه

ادامه مطلب

117

دانلود سورس کد تمامی نسخه های تلگرام + فایل های نصبی

ادامه مطلب

113

دانلود کتابخانه GSON برای اندروید + پروژه

ادامه مطلب

111

دانلود اسکریپت جاوای PS-CH# - ایجاد ورودی متنی پیشرفته

ادامه مطلب

یکشنبه 05 آذر 1396

قسمت هفدهم - لیست ها در HTML

ادامه مطلب

یکشنبه 21 آبان 1396

چگونه می توان با استفاده از CSS ، رنگ placeholder را تغییر داد ؟

ادامه مطلب

یکشنبه 21 آبان 1396

قسمت شانزدهم - جدول ها در HTML

ادامه مطلب

شنبه 20 آبان 1396

دانلود تمامی نسخه های gradle برای اندروید

ادامه مطلب

شنبه 20 آبان 1396

قسمت پانزدهم - عکس ها در HTML

ادامه مطلب

جمعه 19 آبان 1396

قسمت چهاردهم - لینک ها در HTML

ادامه مطلب

یکشنبه 14 آبان 1396

آموزش ساخت و شخصی سازی Navigation Drawer در اندروید استودیو

ادامه مطلب

یکشنبه 14 آبان 1396

قسمت سیزدهم - CSS در HTML

ادامه مطلب

شنبه 13 آبان 1396

قسمت بیست و پنجم (قسمت آخر) - آموزش ساخت بازی حدس

ادامه مطلب

پنجشنبه 11 آبان 1396

قسمت بیست و چهارم - آموزش نحوه ی پردازش فایل ها در جاوا

ادامه مطلب

پنجشنبه 11 آبان 1396

قسمت بیست و سوم - برنامه تکمیلی جاوا (6)

ادامه مطلب

پنجشنبه 11 آبان 1396

قسمت بیست و دوم - معرفی آرایه ها در جاوا

ادامه مطلب

پنجشنبه 11 آبان 1396

قسمت بیست و یکم - برنامه تکمیلی جاوا (5)

ادامه مطلب

پنجشنبه 11 آبان 1396

قسمت بیستم - معرفی مفهوم وراثت در جاوا

ادامه مطلب

پنجشنبه 11 آبان 1396

قسمت نوزدهم - برنامه تکمیلی جاوا (4)

ادامه مطلب

پنجشنبه 11 آبان 1396

قسمت هجدهم - معرفی عبارات کنترلی در جاوا

ادامه مطلب

پنجشنبه 11 آبان 1396

قسمت هفدهم - برنامه تکمیلی جاوا (2-3)

ادامه مطلب

چهارشنبه 10 آبان 1396

چگونه در برنامه نویسی اندروید ، یک ListView با متن و عکس بسازیم ؟

ادامه مطلب

سه شنبه 09 آبان 1396

چگونه در برنامه نویسی اندروید از فونت شخصی خود استفاده کنیم ؟

ادامه مطلب

سه شنبه 09 آبان 1396

دانلود تمامی نسخه های gradle برای اندروید

ادامه مطلب

آموزش ساخت و شخصی سازی Navigation Drawer در اندروید استودیو

ادامه مطلب

چگونه در برنامه نویسی اندروید ، یک ListView با متن و عکس بسازیم ؟

ادامه مطلب

چگونه در برنامه نویسی اندروید از فونت شخصی خود استفاده کنیم ؟

ادامه مطلب

چگونه در برنامه نویسی اندروید می توان آیدی موبایل را بدست آورد ؟

ادامه مطلب

چگونه در برنامه نویسی اندروید برنامه تماس بسازیم ؟

ادامه مطلب

چگونه در برنامه نویسی اندروید یک منو ساده بسازیم ؟

ادامه مطلب

چگونه در برنامه نویسی اندروید از برنامه اسکرین شات بگیریم ؟

ادامه مطلب

چگونه می توان در اندروید RTL یا LTR صفحه را ثابت کرد ؟

ادامه مطلب

چگونه می توان در اندروید حالت افقی (landscape) را غیر فعال کرد ؟

ادامه مطلب

آموزش استفاده از دیتابیس آماده در پروژه اندرویدی

ادامه مطلب

دانلود سورس کد تمامی نسخه های تلگرام + فایل های نصبی

ادامه مطلب

دانلود کتابخانه GSON برای اندروید + پروژه

ادامه مطلب

دانلود سورس کد اپلیکیشن آموزش زبان انگلیسی + فایل APK

ادامه مطلب

چگونه نگذاریم در آغاز اکتیویتی ، EditText فوکوس را بدست آورد ؟

ادامه مطلب

چگونه کیبورد پیش فرض اندروید (Soft Keyboard) را پنهان کرده یا ببندیم ؟

ادامه مطلب

چرا سرعت مجازی ساز اندروید کم است و چگونه می توان سرعت آنرا افزایش داد ؟

ادامه مطلب

تفاوت بین واحد های اندازه گیری "px" , "dp" , "dip" و "sp" چیست ؟

ادامه مطلب

دانلود سورس کد اپلیکیشن آهنگ سازی برای اندروید + فایل APK

ادامه مطلب

دانلود سورس کد اپلیکیشن هواشناسی برای اندروید + فایل APK

ادامه مطلب

× برای نظر گذاشتن یا پاسخ دادن به سوالات باید در سایت عضو باشید !

برای حمایت از ما روی بنر های زیر کلیک کنید .

برای سفارش تبلیغات به ما ایمیل بزنید .

ارتباط با ما