2011-11-17 9 views
188

私のリストビューのためにcustom adapterを作成したいと思います。どのように作成し、それがどのように動作するかを説明する方法を通して私を歩くことができる任意の記事はありますか?リストビューのカスタムアダプタ

+0

このコードは、リンクであることをhttp://androidexample.com/How_To_Create_A_Custom_Listview_-_Android_Example/index.php?view=article_discription&aid=67&aaid=92 –

+0

@Houcineうまく働いています利用できない。 – choz

+0

@choz:私はリンクを記述した場所を見つけることができません。あなたはgoogleでこれを行うことができます。 "ListView with Android"をタップするだけで便利なチュートリアルがたくさんあります。幸運 – Houcine

答えて

277
public class ListAdapter extends ArrayAdapter<Item> { 

    public ListAdapter(Context context, int textViewResourceId) { 
     super(context, textViewResourceId); 
    } 

    public ListAdapter(Context context, int resource, List<Item> items) { 
     super(context, resource, items); 
    } 

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

     View v = convertView; 

     if (v == null) { 
      LayoutInflater vi; 
      vi = LayoutInflater.from(getContext()); 
      v = vi.inflate(R.layout.itemlistrow, null); 
     } 

     Item p = getItem(position); 

     if (p != null) { 
      TextView tt1 = (TextView) v.findViewById(R.id.id); 
      TextView tt2 = (TextView) v.findViewById(R.id.categoryId); 
      TextView tt3 = (TextView) v.findViewById(R.id.description); 

      if (tt1 != null) { 
       tt1.setText(p.getId()); 
      } 

      if (tt2 != null) { 
       tt2.setText(p.getCategory().getId()); 
      } 

      if (tt3 != null) { 
       tt3.setText(p.getDescription()); 
      } 
     } 

     return v; 
    } 

} 

上記の例で使用したパターンの良い説明を書いています。表示したいアイテムのコレクションを持っている必要があります。私の場合は<Item>です。メソッドView getView(int position, View convertView, ViewGroup parent)をオーバーライドする必要があります。

R.layout.itemlistrowは、ListViewの行を定義します。 MainActivity

<?xml version="1.0" encoding="utf-8"?> 
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="wrap_content" android:orientation="vertical" 
    android:layout_width="fill_parent"> 

    <TableRow android:layout_width="fill_parent" 
       android:id="@+id/TableRow01" 
       android:layout_height="wrap_content"> 

     <TextView android:textColor="#FFFFFF" 
        android:id="@+id/id" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:text="id" android:textStyle="bold" 
        android:gravity="left" 
        android:layout_weight="1" 
        android:typeface="monospace" 
        android:height="40sp" /> 
    </TableRow> 

    <TableRow android:layout_height="wrap_content" 
       android:layout_width="fill_parent"> 

     <TextView android:textColor="#FFFFFF" 
        android:id="@+id/categoryId" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:text="categoryId" 
        android:layout_weight="1" 
        android:height="20sp" /> 

     <TextView android:layout_height="wrap_content" 
        android:layout_width="fill_parent" 
        android:layout_weight="1" 
        android:textColor="#FFFFFF" 
        android:gravity="right" 
        android:id="@+id/description" 
        android:text="description" 
        android:height="20sp" /> 
    </TableRow> 

</TableLayout> 

parentViewある(convertViewを介して非常に簡単で、我々はリストビューで表示される行のレイアウトを得ることができ、

ListView yourListView = (ListView) findViewById(R.id.itemListView); 

// get data from the table by the ListAdapter 
ListAdapter customAdapter = new ListAdapter(this, R.layout.itemlistrow, List<yourItem>); 

yourListView .setAdapter(customAdapter); 
+1

コードをお寄せいただきありがとうございます。getViewメソッドについて説明してください。 –

+2

あなたのクラスにアイテムと呼ばれるコレクションを保持する必要はありません。スーパーコンストラクタに渡します。項目はgetItem(int pos)メソッドで取得できます。 –

+1

コンストラクタ経由で渡されているときにgetViewでリソースIDをハードコードするのはなぜですか?建設時に提供されたものを取り出す方法はありますか? – nenchev

7

公式のApiDemosでthis sampleをご覧ください。 BaseAdapterを拡張してListViewに適用する方法を示します。その後、BaseAdapterの参照を見て、各メソッドが何をしているのか(継承されたものを含む)といつどのように使用するのかを理解しようとします。

また、Googleはあなたの友人です:)。

+0

ええ、グーグルは友人ですが、問題はあなたが最終的にヒットするのは、arrayadapterなどを使うことです。私が経験したことから、「ベースアダプターの名前は何だったのか」を探していたのですが、今では複雑なarraylistアダプターを無駄にやりました。 –

+1

私は、Googleは私の友人だと言っていた。それは私をここに連れて来ました.. – choz

10

GoogleにはEfficientAdapterというサンプルがありますが、これは私の考えではカスタムアダプターの実装方法の簡単な例です。 http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List14.html @CommonsWareは、これは私が私のプロジェクトのために使用されていたクラスです http://commonsware.com/Android/excerpt.pdf

+0

+1: 'EfficientAdapter'は良い例です。 –

+2

がダウンしているようです(404)、今どこに隠れているのか分かりますか? – hotzen

+0

@hotzen私はちょうどリンクをチェックして、彼らはまだ両方のアップです。おそらくあなたの終わりに問題があったでしょうか? – Marmoy

6

check this link、このようなListViewを定義します)。

View v = convertView; 

if (v == null) { 

    LayoutInflater vi; 
    vi = LayoutInflater.from(getContext()); 
    v = vi.inflate(R.layout.itemlistrow, null); 

} 

位置を使用すると、List<Item>のオブジェクトを取得できます。

Item p = items.get(position); 

その後、私たちは、オブジェクトの望ましい詳細を、識別されたフォームウィジェットに設定する必要があります。

if (p != null) { 

    TextView tt = (TextView) v.findViewById(R.id.id); 
    TextView tt1 = (TextView) v.findViewById(R.id.categoryId); 
    TextView tt3 = (TextView) v.findViewById(R.id.description); 

    if (tt != null) { 
     tt.setText(p.getId()); 
    } 
    if (tt1 != null) { 

     tt1.setText(p.getCategory().getId()); 
    } 
    if (tt3 != null) { 

     tt3.setText(p.getDescription()); 
    } 
} 

それは(ListView/GridViewある)parentViewに添付されます構築ビューを返します。

+1

うれしかったです。 – Rakhita

33

これは既に回答済みですが、もっと完全な例を挙げたいと思いました。私のプロジェクトでは、このActivityは私のユーザーが自分のアプリケーションを制御するために設定できるさまざまなオプションを表示するために起こっているので、私の例では

は、私たちのカスタムListViewが表示されますListActivityは、OptionsActivityと呼ばれています。リストアイテムタイプは2種類あり、1つのリストアイテムタイプはTextViewで、2番目のリストアイテムタイプはButtonです。あなたは好きなウィジェットを各リストアイテムタイプの中に入れることができますが、私はこの例を単純なものにしました。

getItemView()メソッドは、どのリストアイテムがタイプ1かタイプ2であるべきかをチェックします。私が定義したstatic intによると、最初の5個のリストアイテムはリストアイテムタイプ1になり、最後の5個のリストアイテムはアイテムタイプ2をリストします。したがって、コンパイルしてこれを実行すると、Buttonを含む5つの項目と、TextViewを含む5つの項目を持つListViewが表示されます。

以下は、Activityコード、アクティビティxmlファイル、および各リスト項目タイプのxmlファイルです。

OptionsActivity.java:

public class OptionsActivity extends ListActivity { 

    private static final int LIST_ITEM_TYPE_1 = 0; 
    private static final int LIST_ITEM_TYPE_2 = 1; 
    private static final int LIST_ITEM_TYPE_COUNT = 2; 

    private static final int LIST_ITEM_COUNT = 10; 
    // The first five list items will be list item type 1 
    // and the last five will be list item type 2 
    private static final int LIST_ITEM_TYPE_1_COUNT = 5; 

    private MyCustomAdapter mAdapter; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     mAdapter = new MyCustomAdapter(); 
     for (int i = 0; i < LIST_ITEM_COUNT; i++) { 
      if (i < LIST_ITEM_TYPE_1_COUNT) 
      mAdapter.addItem("item type 1"); 
      else 
      mAdapter.addItem("item type 2"); 
     } 
     setListAdapter(mAdapter); 
    } 

    private class MyCustomAdapter extends BaseAdapter { 

     private ArrayList<String> mData = new ArrayList<String>(); 
     private LayoutInflater mInflater; 

     public MyCustomAdapter() { 
      mInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     } 

     public void addItem(final String item) { 
      mData.add(item); 
      notifyDataSetChanged(); 
     } 

     @Override 
     public int getItemViewType(int position) { 
      if(position < LIST_ITEM_TYPE_1_COUNT) 
       return LIST_ITEM_TYPE_1; 
      else 
       return LIST_ITEM_TYPE_2; 
     } 

     @Override 
     public int getViewTypeCount() { 
      return LIST_ITEM_TYPE_COUNT; 
     } 

     @Override 
     public int getCount() { 
      return mData.size(); 
     } 

     @Override 
     public String getItem(int position) { 
      return mData.get(position); 
     } 

     @Override 
     public long getItemId(int position) { 
      return position; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      ViewHolder holder = null; 
      int type = getItemViewType(position); 
      if (convertView == null) { 
       holder = new ViewHolder(); 
       switch(type) { 
        case LIST_ITEM_TYPE_1: 
         convertView = mInflater.inflate(R.layout.list_item_type1, null); 
         holder.textView = (TextView)convertView.findViewById(R.id.list_item_type1_text_view); 
         break; 
        case LIST_ITEM_TYPE_2: 
         convertView = mInflater.inflate(R.layout.list_item_type2, null); 
         holder.textView = (TextView)convertView.findViewById(R.id.list_item_type2_button); 
         break; 
       } 
       convertView.setTag(holder); 
      } else { 
       holder = (ViewHolder)convertView.getTag(); 
      } 
      holder.textView.setText(mData.get(position)); 
      return convertView; 
     } 

    } 

    public static class ViewHolder { 
     public TextView textView; 
    } 

} 

activity_options.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    > 

    <ListView 
     android:id="@+id/optionsList" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" > 
    </ListView> 

</LinearLayout> 

list_item_type_1.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/list_item_type1_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/list_item_type1_text_view" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Text goes here" /> 

</LinearLayout> 

list_item_type2.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/list_item_type2_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <Button 
     android:id="@+id/list_item_type2_button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Button text goes here" /> 

</LinearLayout> 
+0

'static final int'sの代わりに' Enum'を使用しないのはなぜですか?ちょうど質問しています... –

+0

@YoushaAleayoubはEnum .. for java&kotlinにあります。 – marlonpya

13

このコードは分かりやすいです。

three_horizo​​ntal_text_views_layout.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"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/leftTextView"/> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/centreTextView"/> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/rightTextView"/> 

</LinearLayout> 

ThreeStrings.java

public class ThreeStrings { 
    private String left; 
    private String right; 
    private String centre; 

    public ThreeStrings(String left, String right, String centre) { 
     this.left = left; 
     this.right = right; 
     this.centre = centre; 
    } 
} 

ThreeHorizo​​ntalTextViewsAdapter.java

public class ThreeHorizontalTextViewsAdapter extends ArrayAdapter<ThreeStrings> { 

private int layoutResource; 

public ThreeHorizontalTextViewsAdapter(Context context, int layoutResource, List<ThreeStrings> threeStringsList) { 
    super(context, layoutResource, threeStringsList); 
    this.layoutResource = layoutResource; 
} 

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

    View view = convertView; 

    if (view == null) { 
     LayoutInflater layoutInflater = LayoutInflater.from(getContext()); 
     view = layoutInflater.inflate(layoutResource, null); 
    } 

    ThreeStrings threeStrings = getItem(position); 

    if (threeStrings != null) { 
     TextView leftTextView = (TextView) view.findViewById(R.id.leftTextView); 
     TextView rightTextView = (TextView) view.findViewById(R.id.rightTextView); 
     TextView centreTextView = (TextView) view.findViewById(R.id.centreTextView); 

     if (leftTextView != null) { 
      leftTextView.setText(threeStrings.getLeft()); 
     } 
     if (rightTextView != null) { 
      rightTextView.setText(threeStrings.getRight()); 
     } 
     if (centreTextView != null) { 
      centreTextView.setText(threeStrings.getCentre()); 
     } 
    } 

    return view; 
} 
     } 
ここで

main_layout.xml

<LinearLayout 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:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:orientation="vertical" 
    tools:context="com.androidapplication.ListActivity"> 


    <ListView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/listView"></ListView> 

</LinearLayout> 

MainActivity.java

public class MainActivity extends Activity { 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     List<ThreeStrings> threeStringsList = new ArrayList<>(); 
     ThreeStrings threeStrings = new ThreeStrings("a", "b", "c"); 
     threeStringsList.add(threeStrings);   
     ListView listView = (ListView)findViewById(R.id.listView); 
     ThreeHorizontalTextViewsAdapter threeHorizontalTextViewsAdapter = new ThreeHorizontalTextViewsAdapter(this, R.layout.three_horizontal_text_views_layout, threeStringsList); 
     listView.setAdapter(threeHorizontalTextViewsAdapter); 
     } 
    //......} 
+0

'ThreeHorizo​​ntalTextViewsAdapter.java'のパッケージは何ですか?残りの 'Activities'と同じですか? –

+1

ThreeStringsにはゲッターメソッドはありませんが、コード内でそれらを参照してください... – Penn

3

は、完全な歩行ステップにより、リストビューのステップのためのカスタム・アダプターを作成することによってである -

https://www.caveofprogramming.com/guest-posts/custom-listview-with-imageview-and-textview-in-android.html

public class CustomAdapter extends BaseAdapter{ 
    String [] result; 
    Context context; 
int [] imageId; 
     private static LayoutInflater inflater=null; 
    public CustomAdapter(MainActivity mainActivity, String[] prgmNameList, int[] prgmImages) { 
     // TODO Auto-generated constructor stub 
     result=prgmNameList; 
     context=mainActivity; 
     imageId=prgmImages; 
     inflater = (LayoutInflater)context. 
       getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 
    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return result.length; 
    } 

    @Override 
    public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     return position; 
    } 

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

    public class Holder 
    { 
     TextView tv; 
     ImageView img; 
    } 
    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     Holder holder=new Holder(); 
     View rowView;  
      rowView = inflater.inflate(R.layout.program_list, null); 
      holder.tv=(TextView) rowView.findViewById(R.id.textView1); 
      holder.img=(ImageView) rowView.findViewById(R.id.imageView1);  
     holder.tv.setText(result[position]); 
     holder.img.setImageResource(imageId[position]);   
     rowView.setOnClickListener(new OnClickListener() {    
      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       Toast.makeText(context, "You Clicked "+result[position], Toast.LENGTH_LONG).show(); 
      } 
     }); 
     return rowView; 
    } 

} 
0

BaseAdapterは、リストビュー用の最適なカスタムアダプタです。

Class MyAdapter extends BaseAdapter{} 

、それは等getCount()getView()ような多くの機能を有しています

1

データモデル

public class DataModel { 

String name; 
String type; 
String version_number; 
String feature; 

public DataModel(String name, String type, String version_number, String feature) { 
    this.name=name; 
    this.type=type; 
    this.version_number=version_number; 
    this.feature=feature; 

} 

public String getName() { 
    return name; 
} 

public String getType() { 
    return type; 
} 

public String getVersion_number() { 
    return version_number; 
} 

public String getFeature() { 
    return feature; 
} 

}

アレイアダプタ

public class CustomAdapter extends ArrayAdapter<DataModel> implements View.OnClickListener{ 

private ArrayList<DataModel> dataSet; 
Context mContext; 

// View lookup cache 
private static class ViewHolder { 
    TextView txtName; 
    TextView txtType; 
    TextView txtVersion; 
    ImageView info; 
} 

public CustomAdapter(ArrayList<DataModel> data, Context context) { 
    super(context, R.layout.row_item, data); 
    this.dataSet = data; 
    this.mContext=context; 

} 

@Override 
public void onClick(View v) { 

    int position=(Integer) v.getTag(); 
    Object object= getItem(position); 
    DataModel dataModel=(DataModel)object; 

    switch (v.getId()) 
    { 
     case R.id.item_info: 
      Snackbar.make(v, "Release date " +dataModel.getFeature(), Snackbar.LENGTH_LONG) 
        .setAction("No action", null).show(); 
      break; 
    } 
} 

private int lastPosition = -1; 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    // Get the data item for this position 
    DataModel dataModel = getItem(position); 
    // Check if an existing view is being reused, otherwise inflate the view 
    ViewHolder viewHolder; // view lookup cache stored in tag 

    final View result; 

    if (convertView == null) { 

     viewHolder = new ViewHolder(); 
     LayoutInflater inflater = LayoutInflater.from(getContext()); 
     convertView = inflater.inflate(R.layout.row_item, parent, null); 
     viewHolder.txtName = (TextView) convertView.findViewById(R.id.name); 
     viewHolder.txtType = (TextView) convertView.findViewById(R.id.type); 
     viewHolder.txtVersion = (TextView) convertView.findViewById(R.id.version_number); 
     viewHolder.info = (ImageView) convertView.findViewById(R.id.item_info); 

     result=convertView; 

     convertView.setTag(viewHolder); 
    } else { 
     viewHolder = (ViewHolder) convertView.getTag(); 
     result=convertView; 
    } 

    Animation animation = AnimationUtils.loadAnimation(mContext, (position > lastPosition) ? R.anim.up_from_bottom : R.anim.down_from_top); 
    result.startAnimation(animation); 
    lastPosition = position; 

    viewHolder.txtName.setText(dataModel.getName()); 
    viewHolder.txtType.setText(dataModel.getType()); 
    viewHolder.txtVersion.setText(dataModel.getVersion_number()); 
    viewHolder.info.setOnClickListener(this); 
    viewHolder.info.setTag(position); 
    // Return the completed view to render on screen 
    return convertView; 
} 

}

主な活動

public class MainActivity extends AppCompatActivity { 

ArrayList<DataModel> dataModels; 
ListView listView; 
private static CustomAdapter adapter; 

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

    listView=(ListView)findViewById(R.id.list); 

    dataModels= new ArrayList<>(); 

    dataModels.add(new DataModel("Apple Pie", "Android 1.0", "1","September 23, 2008")); 
    dataModels.add(new DataModel("Banana Bread", "Android 1.1", "2","February 9, 2009")); 
    dataModels.add(new DataModel("Cupcake", "Android 1.5", "3","April 27, 2009")); 
    dataModels.add(new DataModel("Donut","Android 1.6","4","September 15, 2009")); 
    dataModels.add(new DataModel("Eclair", "Android 2.0", "5","October 26, 2009")); 
    dataModels.add(new DataModel("Froyo", "Android 2.2", "8","May 20, 2010")); 
    dataModels.add(new DataModel("Gingerbread", "Android 2.3", "9","December 6, 2010")); 
    dataModels.add(new DataModel("Honeycomb","Android 3.0","11","February 22, 2011")); 
    dataModels.add(new DataModel("Ice Cream Sandwich", "Android 4.0", "14","October 18, 2011")); 
    dataModels.add(new DataModel("Jelly Bean", "Android 4.2", "16","July 9, 2012")); 
    dataModels.add(new DataModel("Kitkat", "Android 4.4", "19","October 31, 2013")); 
    dataModels.add(new DataModel("Lollipop","Android 5.0","21","November 12, 2014")); 
    dataModels.add(new DataModel("Marshmallow", "Android 6.0", "23","October 5, 2015")); 

    adapter= new CustomAdapter(dataModels,getApplicationContext()); 

    listView.setAdapter(adapter); 
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

      DataModel dataModel= dataModels.get(position); 

      Snackbar.make(view, dataModel.getName()+"\n"+dataModel.getType()+" API: "+dataModel.getVersion_number(), Snackbar.LENGTH_LONG) 
        .setAction("No action", null).show(); 
     } 
    }); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

}

row_item.xml

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

<TextView 
    android:id="@+id/name" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:text="Marshmallow" 
    android:textAppearance="?android:attr/textAppearanceSmall" 
    android:textColor="@android:color/black" /> 


<TextView 
    android:id="@+id/type" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/name" 
    android:layout_marginTop="5dp" 
    android:text="Android 6.0" 
    android:textColor="@android:color/black" /> 

<ImageView 
    android:id="@+id/item_info" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentEnd="true" 
    android:layout_alignParentRight="true" 
    android:layout_centerVertical="true" 
    android:src="@android:drawable/ic_dialog_info" /> 


<LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerInParent="true"> 

    <TextView 
     android:id="@+id/version_heading" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="API: " 
     android:textColor="@android:color/black" 
     android:textStyle="bold" /> 

    <TextView 
     android:id="@+id/version_number" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="23" 
     android:textAppearance="?android:attr/textAppearanceButton" 
     android:textColor="@android:color/black" 
     android:textStyle="bold" /> 

</LinearLayout> 

0

(私のデータとしてリストアレイを使用して)カスタムアダプタのよりコンパクト例:

class MyAdapter extends ArrayAdapter<Object> { 
    public ArrayAdapter(Context context, List<MyObject> objectList) { 
     super(context, R.layout.my_list_item, R.id.textViewTitle, objectList.toArray()); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View row = super.getView(position, convertView, parent); 
     TextView title = (TextView) row.findViewById(R.id.textViewTitle); 
     ImageView icon = (ImageView) row.findViewById(R.id.imageViewAccessory); 
     MyObject obj = (MyObject) getItem(position); 
     icon.setImageBitmap(...); 
     title.setText(obj.name); 
     return row; 
    } 
} 

そして、どのようにこれがありますそれを使用してください:

List<MyObject> objectList = ... 
MyAdapter adapter = new MyAdapter(this.getActivity(), objectList); 
listView.setAdapter(adapter); 
0

パブリッククラスCustomAdapterは、それが非常に簡単であるBaseAdapter {

ArrayList<BookPojo> data; 
Context ctx; 
int index=0; 




public CustomAdapter(ArrayList<BookPojo> data, Context ctx) { 
    super(); 
    this.data = data; 
    this.ctx = ctx; 
} 

@Override 
public int getCount() { 
    // TODO Auto-generated method stub 
    return data.size(); 
} 

@Override 
public Object getItem(int position) { 
    // TODO Auto-generated method stub 
    return data.get(position); 
} 

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

@Override 
public View getView(int position, View convertview, ViewGroup parent) { 
    // TODO Auto-generated method stub 
    View v=convertview; 

    if(v==null){ 
     LayoutInflater vi=LayoutInflater.from(ctx); 
     v=vi.inflate(R.layout.messgeview,null); 

    } 

    RelativeLayout rlmessage=(RelativeLayout)v.findViewById(R.id.rlmessgeview); 

    TextView tvisdn=(TextView)v.findViewById(R.id.tvisdn); 
    TextView tvtitle=(TextView)v.findViewById(R.id.tvtitle); 
    TextView tvauthor=(TextView)v.findViewById(R.id.tvauthor); 
    TextView tvprice=(TextView)v.findViewById(R.id.tvprice); 

    BookPojo bpj=data.get(position); 

    tvisdn.setText(bpj.isdn+""); 
    tvtitle.setText(bpj.title); 
    tvauthor.setText(bpj.author); 
    tvprice.setText(bpj.price+""); 

    if(index%2==0) 
    { 
     rlmessage.setBackgroundColor(Color.BLUE); 
    } 
    else 
    { 
     rlmessage.setBackgroundColor(Color.YELLOW); 

    } 

    index++; 

    return v; 

} 

}

0

を拡張します。

import android.content.Context; 
import android.content.DialogInterface; 
import android.support.annotation.NonNull; 
import android.support.annotation.Nullable; 
import android.support.v7.app.AlertDialog; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.TextView; 

import java.util.List; 

/** 
* Created by Belal on 9/14/2017. 
*/ 

//we need to extend the ArrayAdapter class as we are building an adapter 
public class MyListAdapter extends ArrayAdapter<Hero> { 

    //the list values in the List of type hero 
    List<Hero> heroList; 

    //activity context 
    Context context; 

    //the layout resource file for the list items 
    int resource; 

    //constructor initializing the values 
    public MyListAdapter(Context context, int resource, List<Hero> heroList) { 
     super(context, resource, heroList); 
     this.context = context; 
     this.resource = resource; 
     this.heroList = heroList; 
    } 

    //this will return the ListView Item as a View 
    @NonNull 
    @Override 
    public View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent) { 

     //we need to get the view of the xml for our list item 
     //And for this we need a layoutinflater 
     LayoutInflater layoutInflater = LayoutInflater.from(context); 

     //getting the view 
     View view = layoutInflater.inflate(resource, null, false); 

     //getting the view elements of the list from the view 
     ImageView imageView = view.findViewById(R.id.imageView); 
     TextView textViewName = view.findViewById(R.id.textViewName); 
     TextView textViewTeam = view.findViewById(R.id.textViewTeam); 
     Button buttonDelete = view.findViewById(R.id.buttonDelete); 

     //getting the hero of the specified position 
     Hero hero = heroList.get(position); 

     //adding values to the list item 
     imageView.setImageDrawable(context.getResources().getDrawable(hero.getImage())); 
     textViewName.setText(hero.getName()); 
     textViewTeam.setText(hero.getTeam()); 

     //adding a click listener to the button to remove item from the list 
     buttonDelete.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       //we will call this method to remove the selected value from the list 
       //we are passing the position which is to be removed in the method 
       removeHero(position); 
      } 
     }); 

     //finally returning the view 
     return view; 
    } 

    //this method will remove the item from the list 
    private void removeHero(final int position) { 
     //Creating an alert dialog to confirm the deletion 
     AlertDialog.Builder builder = new AlertDialog.Builder(context); 
     builder.setTitle("Are you sure you want to delete this?"); 

     //if the response is positive in the alert 
     builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialogInterface, int i) { 

       //removing the item 
       heroList.remove(position); 

       //reloading the list 
       notifyDataSetChanged(); 
      } 
     }); 

     //if response is negative nothing is being done 
     builder.setNegativeButton("No", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialogInterface, int i) { 

      } 
     }); 

     //creating and displaying the alert dialog 
     AlertDialog alertDialog = builder.create(); 
     alertDialog.show(); 
    } 
} 

出典:Custom ListView Android Tutorial

関連する問題