我想刷新ListView的项目,其中项目是动态的

时间:2017-08-23 05:43:22

标签: android

我想刷新项目来自服务器的ListView项目。我使用notifyDataSetChanged();,但它不适用于我的代码。我按下button后需要刷新ListView

 @Override
 public View getView(final int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = context.getLayoutInflater();
    View listViewItem = inflater.inflate(R.layout.declined_list_view_layout, null, true);

    notifyDataSetChanged();

    TextView textViewId = (TextView) listViewItem.findViewById(R.id.textViewId);
    TextView textViewName = (TextView) listViewItem.findViewById(R.id.textViewName);

    textViewId.setText(ids[position]);
    textViewName.setText( ages[position]+" years"+" , "+heights[position]+" cm"+", "+communities[position]+" : "+castes[position]+" , "+educations[position]+" , "+occupations[position]+" , "+incomes[position]+", "+locations[position]);

    Button btnSort =(Button) listViewItem.findViewById(R.id.btnshort);
    btnSort.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {   
        Toast.makeText(getContext(),"shortlist",Toast.LENGTH_LONG).show();
        }
    });

    Button btnChat =(Button) listViewItem.findViewById(R.id.btnchat);
    btnChat.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
        Intent i = new Intent(v.getContext(), BlankActivity.class);
            Toast.makeText(getContext(), ids[position], 
            Toast.LENGTH_LONG).show();
            i.putExtra("id", ids[position]);
            v.getContext().startActivity(i);

        }
    });

    return listViewItem;
}

2 个答案:

答案 0 :(得分:3)

<强> notifyDataSetChanged()

  

通知附加的观察者基础数据已经存在   已更改,任何反映数据集的视图都应自行刷新。

当我按下后退按钮时,我需要刷新ListView

 @Override
public void onResume() {
    super.onResume();
    adapterOBJ.notifyDataSetChanged();

}
  

onResume() - 当活动进入恢复状态时,它会进入   前台,然后系统调用onResume()回调。这个   是应用与用户交互的状态。

答案 1 :(得分:3)

不要在getView中调用notify,因为这将为列表的每个项目呈现。相反,一旦您从服务器获取整个数据以刷新一次,通常应该这样做。

如果要在按下后退按钮时刷新,请在“活动生命周期”方法中添加notifyDataSetChangedMethod。您可以将它添加到onResume以及。

在里面添加这个onResume应该为你做的伎俩。

adapter.notifyDataSetChanged();

我希望这会对你有所帮助。 :)