ホルダー使用のリストビューについて

187 views
Skip to first unread message

i akira

unread,
Apr 8, 2012, 11:17:14 AM4/8/12
to android-g...@googlegroups.com
はじめまして、あっきと申します。
エクリプスを使用して Android 3.2ベースで開発を行っております。
Listview内に配置したeditText のデータを編集し更新したいと思い
下記のようなサンプルソースを参考にしようとしたのですが
caption Cannot be resolved or is not a field
と、エラーが出てコンパイルが通らない状態です。
エラー発生行はgetView内
holder.caption.setText(myItems.get(position).caption);

^^^^^^^^^ ここのcaption

myItems.get(position).caption = Caption.getText().toString();
^^^^^^^^^ ここのcaption
上記2行で発生しています。

ネットや書籍を1週間程探してみたのですが、javaとandroidの理解不足のため自己解決には到らなかったため
お知恵を拝借したいと思っております。

ここはどういったエラー対処をすればいいのでしょうか?
また、なぜこういったエラーが発生するのでしょうか?
お手数ですがよろしくお願いいたします。

以下ソース

import java.util.ArrayList;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnFocusChangeListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.ListView;

public class AndroidCustomListViewActivity extends Activity {
private ListView myList;
private MyAdapter myAdapter;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

myList = (ListView) findViewById(R.id.MyList);
myList.setItemsCanFocus(true);
myAdapter = new MyAdapter();
myList.setAdapter(myAdapter);

}

public class MyAdapter extends BaseAdapter {
private LayoutInflater mInflater;

public ArrayList myItems = new ArrayList();

public MyAdapter() {
mInflater = (LayoutInflater)
getSystemService(Context.LAYOUT_INFLATER_SERVICE);
for (int i = 0; i < 20; i++) {
ListItem listItem = new ListItem();
listItem.caption = "Caption" + i;
myItems.add(listItem);
}
notifyDataSetChanged();
}

public int getCount() {
return myItems.size();
}

public Object getItem(int position) {
return position;
}

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

public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = mInflater.inflate(R.layout.item, null);
holder.caption = (EditText) convertView
.findViewById(R.id.ItemCaption);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
//Fill EditText with the value you have in data source
holder.caption.setText(myItems.get(position).caption);
holder.caption.setId(position);

//we need to update adapter once we finish with editing
holder.caption.setOnFocusChangeListener(new OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus){
final int position = v.getId();
final EditText Caption = (EditText) v;
myItems.get(position).caption = Caption.getText().toString();
}
}
});

return convertView;
}
}

static class ViewHolder {
EditText caption;
}

static class ListItem {
String caption;
}
}

nandai

unread,
Apr 8, 2012, 11:53:42 AM4/8/12
to android-g...@googlegroups.com
あっきさんこんばんわ。
nandaiです。

myItems.get(position)を((ListItem)myItems.get(position))とするか、

public ArrayList myItems = new ArrayList();を
public ArrayList<ListItem> myItems = new ArrayList<ListItem>();

とすればいけそうな気がします。

/*--------------------------------

  http://www.log-tools.net/
  http://d.hatena.ne.jp/nandai2/

--------------------------------*/


2012年4月9日月曜日 0時17分14秒 UTC+9 i akira:

i akira

unread,
Apr 9, 2012, 8:01:40 AM4/9/12
to android-g...@googlegroups.com
nandai さんこんばんは
あっきです。

ご返答有難う御座います。
ご教授頂きました下記方法にてコンパイルエラーが解消され
無事動作させることができました。

> public ArrayList myItems = new ArrayList();を
> public ArrayList<ListItem> myItems = new ArrayList<ListItem>();

本当にありがとうございました。
今日からゆっくり眠れます^^;


2012年4月9日0:53 nandai <coff...@gmail.com>:

Reply all
Reply to author
Forward
0 new messages