我要做的是从列表视图的客户适配器访问我的主要活动中的ArrayList。
我有一个listview,我正在点击,我在客户适配器(onclick所在的位置)中完成了。当用户点击它时,他们将输入一个标题(文本),它将更新主活动中的一个arraylist(字符串)。
我已经阅读了关于这个主题的一些其他问题,但我对如何使这项工作感到迷茫。
我没有看到发布代码片段的必要,因为它只是一个基本的arraylist(字符串)和listview的自定义适配器。如果需要代码我可以发布。谢谢!
这是适配器代码的一部分:
public class PhotoAdapter extends ArrayAdapter<Photo> {
private final ArrayList<Photo> objects;
public PhotoAdapter(Context context, int textViewResourceId,
ArrayList<Photo> objects) {
super(context, textViewResourceId, objects);
this.objects = objects;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final Photo i = objects.get(position);
View v = convertView;
if (v == null) {
LayoutInflater inflater = (LayoutInflater) getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.listview_row, null);
v.setClickable(true);
v.setFocusable(true);
}
以下是主要活动的代码
public ArrayList<Photo> m_photos = new ArrayList<Photo>();
public ArrayList<String> m_photo_captions = new ArrayList<String>();
private PhotoAdapter m_adapter;
this.list1 = (ListView) findViewById(R.id.lstPhotos);
m_adapter = new PhotoAdapter(this, R.layout.listview_row, m_photos);
LayoutInflater infalter = getLayoutInflater();
list1.setAdapter(m_adapter);
if (Intent.ACTION_SEND_MULTIPLE.equals(action)
&& intentGallery.hasExtra(Intent.EXTRA_STREAM)) {
ArrayList<Parcelable> list = intentGallery
.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
for (Parcelable p : list) {
Uri uri = (Uri) p;
imagePath = getPath(uri);
m_photos.add(new Photo(imagePath, ""));
m_photo_locations.add(imagePath);
m_photo_captions.add("");
m_adapter.notifyDataSetChanged();
}
}
onclick听众
list1.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
// Do whatever you want with m_photo_captions here
Log.v("listview", "listview item clicked");
appErrorAlert("test", "test");
}
});
答案 0 :(得分:3)
您可以将要访问的ArrayList定义为全局实例变量,这样您就可以从自定义适配器中访问它。
如果您为问题提供了代码段,那也会很有帮助。
答案 1 :(得分:1)
现在您已经发布了代码,我建议采用与Mohamed A. Karim不同的方法。
您正试图在OnClickListener
的整行上设置简单Adapter
,但访问您的活动成员。为什么不在OnItemClickListener
中设置一个ListView
,而list1.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
// Do whatever you want with m_photo_captions here
}
});
已经可以访问您想要的列表?
ListView
接下来删除阻止触摸事件到达getView()
之前的所有内容。您还可以使public class PhotoAdapter extends ArrayAdapter<Photo> {
LayoutInflater mInflater;
public PhotoAdapter(Context context, int textViewResourceId,
ArrayList<Photo> objects) {
super(context, textViewResourceId, objects);
mInflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final Photo i = get(position);
View v = convertView;
if (v == null) {
v = mInflater.inflate(R.layout.listview_row, null);
// Initialize your ViewHolder here!
}
// Update your TextViews, ImageViews, etc here
...
}
}
更小更快,如下所示:
{{1}}
希望有所帮助!