2016-10-29 5 views
2

Categoriaという名前のクラスを作成しました.2つの属性(String nombre、int id)を持っています。Customed ArrayAdapter

Categoria型の要素でArrayListを作成しました。

私はListViewコントロールでのArrayListを表示するとき、私はこの取得:この代わりの

enter image description here

を、私は属性ノンブルをしたい、それが表示される文字列です。 ArrayAdapterは、StringではなくCategoria型である必要があります。

どうすればいいですか?おそらくカスタムアダプタを作成しますか?ここで

は、コードの一部です:

public class MainActivity extends AppCompatActivity { 

private ArrayList<Categoria> lista; 
private ArrayAdapter<Categoria> adaptador; 
private ListView view_lista; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    adaptador = new ArrayAdapter<Categoria>(this, android.R.layout 
      .simple_list_item_1, lista); 
    view_lista = (ListView)findViewById(R.id.view_lista); 
    view_lista.setAdapter(adaptador); 

そして、これはsimple_list_item_1レイアウトです:

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceListItemSmall" 
    android:gravity="center_vertical" 
    android:paddingStart="?android:attr/listPreferredItemPaddingStart" 
    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd" 
    android:minHeight="?android:attr/listPreferredItemHeightSmall" /> 

感謝:)

+0

IDはこちらのカスタムアダプターを使用することをおすすめします – Zach

答えて

1

を見てください、ArrayAdapterは、あなたのオブジェクトのtoStringメソッドによって返されるテキストが表示されます。この単純なケースでは、単にCategoriaためtoStringメソッドをオーバーライドして​​フィールドを返すことができます。

public class Categoria { 
    ... 

    @Override 
    public String toString() { 
     return this.nombre; 
    } 
} 

アプリケーションがこれまでに変更する必要があり、あなたがより複雑なレイアウトが必要な場合は、あなたがArrayAdaptergetViewメソッドをオーバーライドすることができますCategoriaのデータをより複雑なビューにバインドします。

1

は、最も簡単な方法は、アダプターにのみのArrayListを渡しています。

Categoriaオブジェクトをアダプタに渡す場合は、独自のカスタムアダプタを作成する必要があります。

linkには、このシナリオに関するかなり良い例が含まれています。

2

ここでは、ArrayList(lista)をアダプタに渡します。アダプタは、ArrayList内の各ObjectのtoString()メソッドを呼び出します。

したがって、CategoriaクラスのtoString()メソッドをオーバーライドして、nombre属性を返すことができます。

@Override 
public String toString(){ 
    return this.nombre; 
} 

また、代わりにあなたのArrayList<Categoria>ArrayList<String>を作成し、のみ(全体ではなくCategoriaオブジェクトの)ノンブル属性を追加することができます。 独自のArrayAdapterを作成し、getView()メソッドに表示される内容をカスタマイズすることもできます。

はデフォルトでthis質問

関連する問題