5-4 作业界面刷新的问题

5-4 作业界面刷新的问题

问题描述:在新增界面将数据添加到数据库后,点击返回, 主activity的expandableListView 会自动更新数据?为什么? 期间并没有使用notfyDataSetChangge();

注:在主activity中所有操作都放在oncrate方法中

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

3回答
underwater 2018-09-16 05:23:02

应该是重新执行了onCreate(),路径1里的Activity生命周期里有讲。

提问者 qq_苁蕶幵始_0 2018-08-14 10:56:16
主界面如下:
public class MainActivity extends AppCompatActivity {

    private List<String> groupList;
    private List<List<Food>> childList;
    private static final String TAG = "MainActivity";
    private ExpandableListView elv;

    int groupid = 0;
    private MyAdapter adapter;
    private Uri uri;
    public static final String URI_PATH = "content://com.imooc.menuprovider";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.e(TAG, "执行MainActivity的create方法" );

        elv = findViewById(R.id.ex_listView);
        uri = Uri.parse(URI_PATH);
        getData();

        elv.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
            @Override
            public boolean onGroupClick(ExpandableListView expandableListView, View view, int i, long l) {
                groupid = i;
                return false;
            }
        });
        elv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            Food food;
            @Override
            public boolean onItemLongClick(final AdapterView<?> adapterView, final View view, final int position, long l) {
                TextView textView = view.findViewById(R.id.child_txt);
                food = (Food) adapterView.getItemAtPosition(position);
                final String id = food.getDish_id();
                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this)
                        .setMessage("您确定要删除【" + textView.getText() + "】吗?")
                        .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialogInterface, int i) {
                                int childCount1 = childList.get(groupid).size();
                                getContentResolver().delete(uri,null,new String[]{id});
                                List<Food> list = childList.get(groupid);
                                Iterator<Food> foodIterator = list.iterator();
                                while (foodIterator.hasNext()){
                                    Food food1 = foodIterator.next();
                                    if (food1.getDish_id() == id){
                                        foodIterator.remove();
                                    }
                                }
                                adapter.notifyDataSetChanged();
//                                elv.setAdapter(adapter);
//                                getData();
                                int childCount2 = childList.get(groupid).size();
                                if (childCount2 < childCount1){
                                    Toast.makeText(MainActivity.this,"删除成功",Toast.LENGTH_SHORT).show();
                                }
                                elv.expandGroup(groupid);
                            }
                        }).setNegativeButton("取消",null);
                builder.show();
//                //group 收起
//                elv.collapseGroup(groupid);
//                //group 展开
//                elv.expandGroup(groupid);
                return false;
            }
        });
        findViewById(R.id.add_txt).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Log.e(TAG, "点击" );
                Intent intent = new Intent(new Intent(MainActivity.this,AddActivity.class));
                String[] type = groupList.toArray(new String[groupList.size()]);
                intent.putExtra("type",type);
                startActivity(intent);
//                finish();
            }
        });
    }
    //获取数据库数据
    public void getData(){
        Cursor cursor = getContentResolver().query(uri,null,null,null,"_id asc");
        groupList = new ArrayList<>();
        childList = new ArrayList<>();

        if (cursor != null){
            List<Food> childitem =  new ArrayList<>();
            while (cursor.moveToNext()){
                String dish_id = cursor.getString(cursor.getColumnIndex("dish_id"));
                String dish_name = cursor.getString(cursor.getColumnIndex("dish_name"));
                String dish_type = cursor.getString(cursor.getColumnIndex("dish_type"));
                if (!groupList.contains(dish_type)){
                    if (!cursor.isFirst()){
                        childList.add(childitem);
                        childitem = new ArrayList<>();
                    }
                    groupList.add(dish_type);

                    childitem.add(new Food(dish_id,dish_name,dish_type));
                }else{
                    childitem.add(new Food(dish_id,dish_name,dish_type));
                }
                if (cursor.isLast()){
                    childList.add(childitem);
                }
            }


        }

//        childList.remove(0);
        Log.e(TAG, "getData: " + childList.size() );
        adapter = new MyAdapter(this,groupList,childList);
        elv.setAdapter(adapter);
    }

新增界面:

public class AddActivity extends AppCompatActivity {

    private String[] type;
    private EditText et_type;
    private EditText et_name;
    private static final String TAG = "AddActivity";
    private String type1;
    private Spinner spinner;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add);
        et_name = findViewById(R.id.name);
        if (getIntent()!= null){
            type = getIntent().getStringArrayExtra("type");
            Log.e(TAG, "onCreate: "+ type.length );
        }
        spinner = findViewById(R.id.spinner);
        ArrayAdapter<String> adapter = new ArrayAdapter<>(this,android.R.layout.simple_spinner_item,type);
        spinner.setAdapter(adapter);
        type1 = spinner.getSelectedItem().toString();
        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                type1 = spinner.getSelectedItem().toString();
            }
            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {

            }
        });
        findViewById(R.id.insert).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ContentValues values = new ContentValues();
                values.put("dish_name",et_name.getText().toString());
                values.put("dish_type",type1);
                Uri uri = getContentResolver().insert(Uri.parse(MainActivity.URI_PATH),values);
                Toast.makeText(AddActivity.this,"保存成功,编号为" + ContentUris.parseId(uri),Toast.LENGTH_LONG).show();
                et_name.setText("");

            }
        });
        findViewById(R.id.back_txt).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent= new Intent(AddActivity.this,MainActivity.class);
                Log.e(TAG, "点击返回 " );
                startActivity(intent);

            }
        });
    }
}


  • 你在新增界面使用 startActivity(intent);就会回调主activity的onCreate()方法
    2018-08-14 11:33:41
  • 提问者 qq_苁蕶幵始_0 回复 irista23 #2
    真的唉 E/AddActivity: 点击返回 E/MainActivity: 执行MainActivity的create方法
    2018-08-14 17:06:12
  • irista23 回复 提问者 qq_苁蕶幵始_0 #3
    startActivity()就是启动一个activity
    2018-08-14 17:38:45
irista23 2018-08-14 10:50:05

是不是在onResume() 回调中重新加载的数据呢?

  • 提问者 qq_苁蕶幵始_0 #1
    并没有重写onResume()
    2018-08-14 10:52:32
  • irista23 回复 提问者 qq_苁蕶幵始_0 #2
    你用的是android4.*的版本吗?新增界面你是finish()?
    2018-08-14 11:10:55
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
Android网络操作与数据存储2018版
  • 参与学习           人
  • 提交作业       307    份
  • 解答问题       1613    个

本专题是联网及数据处理的必备技能。课程从网络基础知识到线程间协同工作、异步下载处理。介绍了Android内外部文件存储、轻量级数据库SQLite的使用。利用屏幕适配、状态保持、百度地图解决实际问题。

了解课程
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师