如何在Android Studio中制作自定义适配器

时间:2018-10-23 09:38:55

标签: java android-studio

我正在尝试为我的小型应用程序创建自定义适配器,我陷入了用数据填充行的问题,为此我找不到很好的教程。我知道如何使用简单适配器和阵列适配器,但是自定义适配器有一些麻烦。
我不知道如何实现它,在线文章使我感到困惑,请帮助我了解逻辑以及应该执行哪些步骤。

package com.example.administrator.healthyfood;

import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.ListView;

public class MainActivity extends AppCompatActivity {
    ListView list;
    String[] food = {"Dog","Cat","Cow","Fish","Frog","Bird","Rabbit","Horse","Chikcen"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        list = (ListView)findViewById(R.id.listView);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    public class MyListViewAdapter extends BaseAdapter {
        @Override
        public int getCount() {
        return food.lenght();
        }
        @Override
        public long getItemId(int i) {
            return 0;
        }

        @Override
        public Object getItem(int i) {
            return null;
        }

        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {
            return null;
        }
    }
}

3 个答案:

答案 0 :(得分:0)

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <ListView
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true" >

    </ListView>

</RelativeLayout>

custom.xml

<?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="match_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <LinearLayout
            android:layout_width="255dp"
            android:layout_height="wrap_content"
            android:orientation="vertical" >

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical" >

                <TextView
                    android:id="@+id/title"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Video1"
                    android:textAppearance="?android:attr/textAppearanceLarge"
                    android:textColor="#339966"
                    android:textStyle="bold" />
            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical" >

                <TextView
                    android:id="@+id/detail"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="video1"
                    android:textColor="#606060" />
            </LinearLayout>
        </LinearLayout>

        <ImageView
            android:id="@+id/img"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_launcher" />

    </LinearLayout>

</LinearLayout>

您的MainActivity.java-

package com.example.sample;

import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;


public class MainActivity extends Activity {

    ListView l1;
    String[] t1={"video1","video2"};
    String[] d1={"lesson1","lesson2"};
    int[] i1 ={R.drawable.ic_launcher,R.drawable.ic_launcher};


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        l1=(ListView)findViewById(R.id.list);
        l1.setAdapter(new dataListAdapter(t1,d1,i1));
    }

    class dataListAdapter extends BaseAdapter {
        String[] Title, Detail;
        int[] imge;

        dataListAdapter() {
            Title = null;
            Detail = null;
            imge=null;
        }

        public dataListAdapter(String[] text, String[] text1,int[] text3) {
            Title = text;
            Detail = text1;
            imge = text3;

        }

        public int getCount() {
            // TODO Auto-generated method stub
            return Title.length;
        }

        public Object getItem(int arg0) {
            // TODO Auto-generated method stub
            return null;
        }

        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return position;
        }

        public View getView(int position, View convertView, ViewGroup parent) {

            LayoutInflater inflater = getLayoutInflater();
            View row;
            row = inflater.inflate(R.layout.custom, parent, false);
            TextView title, detail;
            ImageView i1;
            title = (TextView) row.findViewById(R.id.title);
            detail = (TextView) row.findViewById(R.id.detail);
            i1=(ImageView)row.findViewById(R.id.img);
            title.setText(Title[position]);
            detail.setText(Detail[position]);
            i1.setImageResource(imge[position]);

            return (row);
        }
    }
}

希望这对您来说已经足够。

答案 1 :(得分:0)

在android中使用BaseAdapter

public class CustomAdapter extends BaseAdapter {
@Override
public int getCount() {
return 0;
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
return null;
}

这是android中的ArrayAdapter

public class MyAdapter extends ArrayAdapter {
public MyAdapter(Context context, int resource, int textViewResourceId, List objects) {
super(context, resource, textViewResourceId, objects);
}
@Override
public int getCount() {
return super.getCount();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
return super.getView(position, convertView, parent);
}
}

代码演示BaseAdapter,位于:https://code-android-example.blogspot.com/2019/11/how-to-adapter-example-in-android.html

答案 2 :(得分:0)

您可以使用这些简单的步骤创建一个简单的适配器类

创建一个java类

public class Wallet_Adapter extends RecyclerView.Adapter<Wallet_Adapter.ViewHolder>

{

LayoutInflater inflater;
List<Wallet_Model> modelclasslists;

public Wallet_Adapter(Context ctx, List<Wallet_Model> modelclasslists)
{
    this.inflater=LayoutInflater.from(ctx);
    this.modelclasslists=modelclasslists;
}

@NonNull
@Override
public Wallet_Adapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view=inflater.inflate(R.layout.layout_wallet,parent,false);
    return new Wallet_Adapter.ViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull Wallet_Adapter.ViewHolder holder, int position) {
    holder.date.setText(modelclasslists.get(position).getDate());
    holder.amount.setText(modelclasslists.get(position).getAmount());
    holder.description.setText(modelclasslists.get(position).getDescription());
    holder.type.setText(modelclasslists.get(position).getType());
}

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

public class  ViewHolder extends RecyclerView.ViewHolder
{
    TextView date,amount,description,type;

    public ViewHolder(@NonNull View itemView)
    {
        super(itemView);
        date=itemView.findViewById(R.id.dateans);
        amount=itemView.findViewById(R.id.amountans);
        description=itemView.findViewById(R.id.descriptionans);
        type=itemView.findViewById(R.id.typeans);
    }
}

}