【问题标题】:Add data to custom ListView scrolling list将数据添加到自定义 ListView 滚动列表
【发布时间】:2015-05-24 10:15:04
【问题描述】:

我实现了一个自定义适配器,用一个image 和两个TextField 填充自定义ListView。现在我想要做的是添加新行动态向下滚动列表。我能做到这一点吗?

这是适配器的代码

public class CustomListAdapter extends ArrayAdapter<String> {

    private final Activity context;
    private final String[] itemname;
    private final Integer[] imgid;
    private final String[] questions;

    public CustomListAdapter(Activity context, String[] itemname, Integer[] imgid, String[] questions) {
        super(context, R.layout.mylist, itemname);
        // TODO Auto-generated constructor stub

        this.context = context;
        this.itemname = itemname;
        this.imgid = imgid;
        this.questions=questions;
    }

    public View getView(int position, View view, ViewGroup parent) {
        LayoutInflater inflater = context.getLayoutInflater();
        View rowView = inflater.inflate(R.layout.mylist, null, true);
        rowView.setPadding(0,10,0,10);

        TextView txtTitle = (TextView) rowView.findViewById(R.id.nameList);
        txtTitle.setTextColor(Color.BLACK);
        ImageView imageView = (ImageView) rowView.findViewById(R.id.imgList);
        TextView extratxt = (TextView) rowView.findViewById(R.id.question);

        txtTitle.setText(itemname[position]);
        imageView.setImageDrawable(new RoundImage(BitmapFactory.decodeResource(context.getResources(), imgid[position])));
        //imageView.setImageResource(imgid[position]);
        extratxt.setText(questions[position]);
        return rowView;

    };
}

这是列表所在fragment的代码的一部分

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedBundle) {
     this.adapter=new CustomListAdapter(getActivity(), itemname, imgid, questions);
            list=(ListView)firstAccessView.findViewById(R.id.list);
            list.setAdapter(adapter);

            list.setOnItemClickListener(new AdapterView.OnItemClickListener() {


    //stuff
      @Override
        public void onItemClick(AdapterView<?> parent, View view,
                                int position, long id) {
            // TODO Auto-generated method stub
            String Slecteditem= itemname[+position];
            Toast.makeText(getActivity().getApplicationContext(), Slecteditem, Toast.LENGTH_SHORT).show();

        }
    });
}

【问题讨论】:

    标签: android listview android-adapter


    【解决方案1】:

    在具有onCreateView() 的片段中覆盖onScroll() 方法,实现onScrollListener

    将您的问题字符串数组更改为 ArrayList。您也可以对其他列表执行此操作。

    private ArrayList<String> questions;
    
    public CustomListAdapter(Activity context, String[] itemname, Integer[] imgid, ArrayList<String> questions) {
        super(context, R.layout.mylist, itemname);
        // TODO Auto-generated constructor stub
    
        this.context = context;
        this.itemname = itemname;
        this.imgid = imgid;
        this.questions=questions;
    }
    
    public View getView(int position, View view, ViewGroup parent) {
        LayoutInflater inflater = context.getLayoutInflater();
        View rowView = inflater.inflate(R.layout.mylist, null, true);
        rowView.setPadding(0,10,0,10);
    
        TextView txtTitle = (TextView) rowView.findViewById(R.id.nameList);
        txtTitle.setTextColor(Color.BLACK);
        ImageView imageView = (ImageView) rowView.findViewById(R.id.imgList);
        TextView extratxt = (TextView) rowView.findViewById(R.id.question);
    
        txtTitle.setText(itemname[position]);
        imageView.setImageDrawable(new RoundImage(BitmapFactory.decodeResource(context.getResources(), imgid[position])));
        //imageView.setImageResource(imgid[position]);
        extratxt.setText(questions.get(position));
        return rowView;
    
    };
    }
    

    onScroll 的实现

    @Override
    public void onScroll(AbsListView view, int firstVisibleItem,
            int visibleItemCount, int totalItemCount) {
    
    //load your new set of data here.
    your_adapter.notifyDataSetChanged();
    }
    

    【讨论】:

    • 我怎样才能附加我的数据?
    • 对你的数据做一些分页.. 获取部分数据。然后您可以使用集合来附加数据。然后通知您的适配器。
    • 如果我的适配器扩展了 ArrayAdapter,我如何附加数据。当我尝试在 insideAll 方法中执行 myadapter.addAll() 时,我只能放入 String,而我想放入更多
    • 收藏(旧列表,新列表);它将在您的列表中附加数据。你的类型列表。
    • 查看我的编辑。我刚刚将您的问题从字符串数组转换为字符串数组列表。你可以为所有人做。
    【解决方案2】:
    @Override
        public void onScroll(AbsListView view, int firstVisibleItem,
                int visibleItemCount, int totalItemCount) {
    
        //loadMoreData
    
        //if using arrayAdapter, use this
         for (String i: itemname) {
             adapter.add(i);
         }
        adapter.notifyDataSetChanged();
        }
    

    【讨论】:

    • 发布只有代码的答案不是答案。请解释代码。
    猜你喜欢
    • 1970-01-01
    • 2020-09-19
    • 2021-01-02
    • 2016-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-23
    • 1970-01-01
    相关资源
    最近更新 更多