Android TV 개발:RecycleView 를 사용 하여 가로 Listview 를 구현 하고 클릭 이벤트 에 응답 하 는 코드
8317 단어 androidRecycleViewListview
1.자신의 효과 그림 을 먼저 붙 입 니 다(가로 스크롤 가능,아 이 템 클릭 이벤트 응답):
2.클릭 이벤트 에 대한 세부 사항
핵심:인터페이스 리 셋 사용
adapter 에서 인 터 페 이 스 를 정의 한 다음 에 onBindView Holder 에서 holder.itemView 에 해당 하 는 감청 을 설정 하고 마지막 으로 우리 가 설정 한 감청 을 되 돌려 줍 니 다.
class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.MyViewHolder>
{
//...
public interface OnItemClickLitener
{
void onItemClick(View view, int position);
void onItemLongClick(View view , int position);
}
private OnItemClickLitener mOnItemClickLitener;
public void setOnItemClickLitener(OnItemClickLitener mOnItemClickLitener)
{
this.mOnItemClickLitener = mOnItemClickLitener;
}
@Override
public void onBindViewHolder(final MyViewHolder holder, final int position)
{
holder.tv.setText(mDatas.get(position));
// ,
if (mOnItemClickLitener != null)
{
holder.itemView.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
int pos = holder.getLayoutPosition();
mOnItemClickLitener.onItemClick(holder.itemView, pos);
}
});
holder.itemView.setOnLongClickListener(new OnLongClickListener()
{
@Override
public boolean onLongClick(View v)
{
int pos = holder.getLayoutPosition();
mOnItemClickLitener.onItemLongClick(holder.itemView, pos);
return false;
}
});
}
}
//...
}
activity 에 감청 을 설정 하고 인 터 페 이 스 를 실현 합 니 다.
mAdapter.setOnItemClickLitener(new OnItemClickLitener()
{
@Override
public void onItemClick(View view, int position)
{
Toast.makeText(HomeActivity.this, position + " click",
Toast.LENGTH_SHORT).show();
}
@Override
public void onItemLongClick(View view, int position)
{
Toast.makeText(HomeActivity.this, position + " long click",
Toast.LENGTH_SHORT).show();
mAdapter.removeData(position);
}
});
3.가로 효과 구현 핵심:LinearLayoutManager
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mContext,LinearLayoutManager.HORIZONTAL,false);
mRecyclerView.setLayoutManager(linearLayoutManager);
4.RecyclerView 의 하위 아 이 템 에 초점 맞 추기
mRecyclerView.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus){
if(mRecyclerView.getChildCount()>0){
mRecyclerView.getChildAt(0).requestFocus();
}
}
}
});
5.코드 구현:
//
public class EasyLayout extends LinearLayout{
private MyAdapter mAdapter;
private RecyclerView mRecyclerView;
private Context mContext;
private List<String> mDatas;
public EasyLayout(Context context) {
super(context);
mDatas = new ArrayList<String>();
for (int i=0;i<20;i++){
String str = " :"+i;
mDatas.add(str);
}
this.setBackgroundColor(Color.parseColor("#407EAf"));
this.mContext = context;
this.setOrientation(VERTICAL);
createLayout();
}
private void createLayout() {
//
TextView te = new TextView(mContext);
ViewGroup.LayoutParams lp = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,160);
this.addView(te,lp);
mRecyclerView = new RecyclerView(mContext);
lp = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT);
this.addView(mRecyclerView,lp);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mContext,LinearLayoutManager.HORIZONTAL,false);
mRecyclerView.setLayoutManager(linearLayoutManager);
//
mAdapter = new MyAdapter( mContext,mDatas);
mRecyclerView.setAdapter(mAdapter);
//
mAdapter.setmOnItemClickLitener(new MyAdapter.OnItemClickLitener() {
@Override
public void onItemClick(View view, int position) {
Toast.makeText(mContext," :"+position,Toast.LENGTH_SHORT).show();
}
});
// RecyclerView item
mRecyclerView.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus){
if(mRecyclerView.getChildCount()>0){
mRecyclerView.getChildAt(0).requestFocus();
}
}
}
});
}
//
public static class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder>
{
private Context mContext;
private List<String> mDatas;
private LayoutInflater mInflater;
private OnItemClickLitener mOnItemClickLitener;
//
public interface OnItemClickLitener
{
void onItemClick(View view, int position);
}
public MyAdapter( Context mContext,List<String> datats)
{
this.mContext = mContext;
this.mDatas = datats;
mInflater = LayoutInflater.from(this.mContext);
}
public void setmOnItemClickLitener(OnItemClickLitener mOnItemClickLitener)
{
this.mOnItemClickLitener = mOnItemClickLitener;
}
@Override
public int getItemCount()
{
return mDatas.size();
}
/**
* ViewHolder
*/
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int i)
{
View view = mInflater.inflate(R.layout.easy_item,null);
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}
/**
*
*/
@Override
public void onBindViewHolder(final ViewHolder viewHolder, final int position)
{
viewHolder.btn.setText(mDatas.get(position));
viewHolder.btn.setTextSize(40);
viewHolder.btn.setGravity(Gravity.CENTER);
//
if (mOnItemClickLitener != null){
viewHolder.btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
int pos = viewHolder.getLayoutPosition();
mOnItemClickLitener.onItemClick( viewHolder.btn,pos);
}
});
}
}
public class ViewHolder extends RecyclerView.ViewHolder // inflate item
{
Button btn;
public ViewHolder(View arg0)
{
super(arg0);
btn = (Button) arg0.findViewById(R.id.btn);
}
}
}
// activity
public class GallarRecyActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EasyLayout easyLayout = new EasyLayout(this);
setContentView(easyLayout);
}
}
easy_item.xml 파일
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/btn"
android:layout_width="320dp"
android:layout_height="430dp" />
</LinearLayout>
6. 소스 코드 및 apk 이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.