2016-04-26 9 views
0

私はAndroid開発のために新規です。Androidカスタムカスタムオブジェクトを持つArrayAdapter

私は、カスタムスタジオでカスタムオブジェクトを受け入れるためにカスタムArrayAdapterを実装しようとしていました。

私はいくつかのチュートリアルからソースコードを参照しているが、私の画面出力は、カスタムオブジェクトのみArrayAdaptertextViewResourceIdとリンクではなく、カスタムオブジェクトのプロパティは、レイアウト内のすべてのEditTextに記入TextViewに記入することを不適切でした適切に。

私は問題を解決するためにArrayAdapterのコンストラクタでtextViewResourceIdパラメータを削除しようとしましたが、Androidのメーカーがエラーを返しました - あなたはTextViewの

のリソースIDを指定する必要があり、私はカスタムオブジェクトのプロパティを記入したいですすべてEditTextとエラーメッセージは返されません、誰でも私にヒントを与えることができますか?ここで

は私のレイアウトです:

row_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:id="@+id/row_id" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:visibility="gone"/> 

<EditText 
    android:id="@+id/row_no" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_weight="1" 
    android:layout_margin="1dp" 
    android:layout_gravity="center_horizontal" 
    android:background="@color/colorWhite"/> 

<EditText 
    android:id="@+id/row_text" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_weight="1" 
    android:layout_margin="1dp" 
    android:layout_gravity="center_horizontal" 
    android:background="@color/colorWhite"/> 


</LinearLayout> 
ここ

は私のカスタムオブジェクトです:

Row.java

public class Row 
{ 
    public int RowNo; 
    public String RowText; 

    public Row(int no, String text) 
    { 
     this.RowNo = no; 
     this.RowText = text; 
    } 
} 

はここに私のですcu STOM ArrayAdapter:ここ

RowAdapter.java

public class RowAdapter extends ArrayAdapter<Row> { 

    private final Activity _context; 
    private final ArrayList<Row> rows; 

    static class ViewHolder 
    { 
     EditText RowNo; 
     EditText RowText; 
    } 

    public RowAdapter(Activity context, ArrayList<Row> rows) 
    { 
     super(context,R.layout.row_layout, R.id.row_id ,rows); 
     this._context = context; 
     this.rows = rows; 
    } 

    public View GetView(int position, View convertView, ViewGroup parent){ 
     ViewHolder holder = null; 

     if(convertView == null) 
     { 
      LayoutInflater inflater = _context.getLayoutInflater(); 
      convertView = inflater.inflate(R.layout.row_layout,parent,false); 

      holder = new ViewHolder(); 
      holder.RowNo = (EditText)convertView.findViewById(R.id.row_no); 
      holder.RowText = (EditText)convertView.findViewById(R.id.row_text); 

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

     holder.RowNo.setText(rows.get(position).RowNo); 
     holder.RowText.setText(rows.get(position).RowText); 

     return convertView; 
    } 
} 

は私のActivityクラスです:

RowActivity.java

@Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.row_list_page); 

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

     ArrayList<Row> rows = new ArrayList<Row>(); 
     rows.add(new Row(1,"Test")); 
     rows.add(new Row(2,"Test")); 
     rows.add(new Row(3"Test")); 

     RowAdapter adapter = new RowAdapter(this,rows); 
     listView.setAdapter(adapter); 
} 
+0

あなたは 'BaseAdapter'を使うことができます。 –

+1

私はあなたがIDEの助けを借りて実装するのではなく、あなた自身でこれらを書いたと思います。さもなければ、 'override'アノテーションと' GetView'メソッドではなく 'getView'メソッドがあります。どちらもxamarinに関連していません。 –

+0

Shree Krisbna:はい、そうです。次回はこの種の間違いを避けるために知性を使うつもりです。ありがとうございました。 – IsaacOrz

答えて

1

は、アダプタのコードを働いている

public class RowAdapter extends ArrayAdapter<Row> { 

    private final Activity _context; 
    private final ArrayList<Row> rows; 

    public class ViewHolder 
    { 
     EditText RowNo; 
     EditText RowText; 
    } 

    public RowAdapter(Activity context, ArrayList<Row> rows) 
    { 
     super(context,R.layout.row_layout, R.id.row_id ,rows); 
     this._context = context; 
     this.rows = rows; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent){ 
     ViewHolder holder = null; 

     if(convertView == null) 
     { 
      LayoutInflater inflater = _context.getLayoutInflater(); 
      convertView = inflater.inflate(R.layout.row_layout,parent,false); 

      holder = new ViewHolder(); 
      holder.RowNo = (EditText)convertView.findViewById(R.id.row_no); 
      holder.RowText = (EditText)convertView.findViewById(R.id.row_text); 

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

     holder.RowNo.setText(""+rows.get(position).RowNo); 
     holder.RowText.setText(rows.get(position).RowText); 

     return convertView; 
    } 
} 

holder.RowNo.setText(rows.get(位置).RowNo)であなたの取得の例外。


holder.RowNo.setText( "" + rows.get(position).RowNo);

+0

とてもうまく動作します、ありがとうございます。便利だと – IsaacOrz

+0

の投票が素晴らしいだろう –

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

この方法は、取得するために呼び出されます争うwオブジェクト。あなたのコードで 次のコードではないgetView

0

変更、GetViewがあります: -

RowAdapter。Javaの

public class RowAdapter extends extends BaseAdapter { 

     private final Context _context; 
     private final ArrayList<Row> rows; 

     public RowAdapter(Context context, ArrayList<Row> rows) 
     { 
      this._context = context; 
      this.rows = rows; 
     } 

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

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

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

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

       LayoutInflater inflater = (LayoutInflater) _context 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

       View rowView=inflater.inflate(R.layout.row_layout, null,true); 

       EditText RowNo = (EditText) rowView.findViewById(R.id.row_no); 
       EditText RowText = (EditText) rowView.findViewById(R.id.row_text); 

       RowNo.setText(rows.get(position).RowNo); 
       RowText.setText(rows.get(position).RowText); 

      return rowView; 
     } 
    } 
0

変更あなたの

public View GetView(int position, View convertView, ViewGroup parent) 

@Override 

パブリックビューgetViewメソッド(int型の位置、表示convertView、のViewGroupの親)

付きここで
holder.RowNo.setText(""+rows.get(position).RowNo); 
関連する問題