java - 从自定义适配器访问ArrayList

标签 java android arraylist

我想做的是从 ListView 的客户适配器访问我的主要 Activity 中的 ArrayList。

我有一个可点击的 ListView ,这是我在客户适配器(onclick 所在的位置)中完成的。当用户单击它时,他们将输入一个标题(文本),该标题将更新主 Activity 中的数组列表(字符串)。

我已经阅读了有关该主题的其他一些问题,但我不知道如何进行这项工作。

我没有看到需要发布代码 fragment ,因为它只是一个基本的数组列表(字符串)和一个 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);
        }

这是来自主要 Activity 的代码

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");
        }
    });

最佳答案

您可以将要访问的 ArrayList 定义为全局实例变量,这样您就可以从自定义适配器内部访问它。

如果您提供问题的代码 fragment 也会很有帮助。

关于java - 从自定义适配器访问ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12151901/

相关文章:

java - 当数据存储和数据格式在未来版本中可能发生变化时,存储应用程序数据的最佳方式?

java - 如何使用 while 循环填充 List 而无需每次都声明一个新对象?

android - 我可以在 LinearLayout 中强制缩小特定元素吗

java - 使用 GSON 将包含数组的 JSON 对象转换为 ArrayList<POJO>

java - 复制 ArrayList 的前半部分

java - RandomAccessSubList 未序列化

java - 如何查找 Java 内存泄漏

java - 词频计数器,列表无法正常工作

android - 为什么我的应用程序不断出现 "The application <ClassName> (<package.ClassName>) has stopped unexpectedly. Please try again later."错误?

android - 检测android native 代码中的内存泄漏