繁体   English   中英

使用notifyDataSetChanged()时无法在Android的ListView中显示以前的数据?

[英]Not able to display previous data in ListView in Android while using notifyDataSetChanged()?

使用适配器的notifyDataSetChanged()方法时,无法显示ListView中显示的先前数据。 使用String数组(甚至尝试使用ArrayList<String> )存储数据。

我已经尝试了与该问题相关的几乎所有答案,但无法获得正确的结果。 任何帮助将不胜感激。 在我的代码中,我试图修改String数组。

主要活动

public class MainActivity extends ActionBarActivity implements View.OnClickListener{

    String countryArray[];
    Button add;
    CustomAdapter adapter;
    ListView list,newList;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        countryArray = new String[3];
        countryArray[0] = "India";
        countryArray[1] = "USA";
        countryArray[2] = "England";
        adapter = new CustomAdapter(this,android.R.layout.simple_list_item_1,countryArray);
        list = (ListView) findViewById(R.id.lvCheckList);
        newList = list;
        list.setAdapter(adapter);
        add = (Button) findViewById(R.id.bAdd);
        add.setOnClickListener(this);
    }


    @Override
    public void onClick(View v) {
        countryArray[2] = "belgium";
        adapter.notifyDataSetChanged();
    }
}

CustomAdapter

public class CustomAdapter extends ArrayAdapter<String> {

    Context context;
    String[] values;
    View rowView;

    public CustomAdapter(Context context, int val, String[] objects) {
        super(context,val,objects);
        this.context = context;
        this.values = objects;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if(convertView == null) {
            LayoutInflater inflater = (LayoutInflater)    context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            rowView = inflater.inflate(R.layout.test, parent, false);
        }
        TextView tx = (TextView) rowView.findViewById(R.id.tv1);
        ImageView iv = (ImageView) rowView.findViewById(R.id.iv1);
        tx.setText(values[position]);
        iv.setImageResource(R.drawable.Image1);
        return rowView;
    }
}

请在您的代码中检查此行。

rowView = convertView;

并且当您放置notifydatasetchanged()方法时,行将更新和刷新。 因此,在获取数据后将此方法放入getView()

请检查此链接

您可以覆盖属于Activity的onResume方法。 您需要将此方法添加到您的活动中。

    @Override
public void onResume()
{
    super.onResume();
    adapter = new CustomAdapter(this,android.R.layout.simple_list_item_1,countryArray);
    list.setAdapter(adapter);
}

像这样更改自定义适配器的getView()方法。

  @Override
    public View getView(int position, View convertView, ViewGroup parent) {

            rowView = convertView; //you are missing this line
            if(convertView == null) {
                LayoutInflater inflater = (LayoutInflater)    context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                rowView = inflater.inflate(R.layout.test, parent, false);
            }
            TextView tx = (TextView) rowView.findViewById(R.id.tv1);
            ImageView iv = (ImageView) rowView.findViewById(R.id.iv1);
            tx.setText(values[position]);
            iv.setImageResource(R.drawable.Image1);
            return rowView;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM