如何恢复RecyclerView?

时间:2015-11-04 17:03:05

标签: android android-activity state android-adapter android-recyclerview

我有以下情况:

  1. 我有两项活动(主要活动和产品卡活动)
  2. 主要活动有一个包含物品的RecyclerView。 (用户可以手动添加项目。例如,他添加3项)
  3. 用户点击某个项目并转到ProductCard活动
  4. 在ProductCard活动用户中,点击按钮(moneyOk_readylist)并转到主要活动
  5. 但是当用户执行最后一步时,RecyclerView变为空白(空)。 我知道它与国家有关,但不知道如何。 任何人都可以帮助我吗?

    MainActivity

    import android.content.Intent;
    import android.os.Bundle;
    import android.os.PersistableBundle;
    import android.support.design.widget.FloatingActionButton;
    import android.support.design.widget.Snackbar;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.CardView;
    import android.support.v7.widget.LinearLayoutManager;
    import android.support.v7.widget.RecyclerView;
    import android.support.v7.widget.Toolbar;
    import android.util.Log;
    import android.view.View;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.widget.Toast;
    
    import java.io.Serializable;
    import java.util.ArrayList;
    import java.util.List;
    
    public class MainActivity extends AppCompatActivity {
        private List<Person> persons;
        private RecyclerView rv;
        final String LOG_TAG = "myLogs";
    
        RVAdapter adapter;
        Person person;
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            rv = (RecyclerView)findViewById(R.id.rv);
            rv.setHasFixedSize(true);
            LinearLayoutManager llm = new LinearLayoutManager(this);
            rv.setLayoutManager(llm);
            persons = new ArrayList<>();
            adapter = new RVAdapter(persons);
            rv.setAdapter(adapter);
    
    
    
            if ((savedInstanceState != null) && (savedInstanceState.getSerializable("card") != null)) {
                persons.clear();
                persons.addAll((List<Person>) savedInstanceState.getSerializable("card"));
                adapter.notifyDataSetChanged();
                    Log.d(LOG_TAG, "restore card with persons" + persons);
                    }
    
    
    
            adapter.setOnItemClickListener(new RVAdapter.MyClickListener() {
                @Override
                public void onItemClick(int position, View v) {
                    Toast.makeText(MainActivity.this, "push on item" + position, Toast.LENGTH_SHORT).show();
                    Intent intent = new Intent(MainActivity.this, ProductCard.class);
                    startActivity(intent);
                    Log.d(LOG_TAG, "go to ProductCard class" + persons);
                }
    
            });
            adapter.setOnItemLongClickListener(new RVAdapter.MyLongClickListener() {
                @Override
                public void onItemLongClick(int position, View v) {
                    Toast.makeText(MainActivity.this, "push on item long" + position, Toast.LENGTH_SHORT).show();
                    Log.d(LOG_TAG, "Removed " + position);
                    persons.remove(position);
                    adapter.notifyDataSetChanged();
                }
            });
    
    
            setSupportActionBar(toolbar);
    
            FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
            fab.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                   person= new Person("Emma Wilson", "23 years old", R.drawable.im_beach);
                   persons.add(person);
    
                   Log.d(LOG_TAG, "push add" + persons);
                   adapter.notifyDataSetChanged();
                }
            });
    
        }
    
        @Override
        protected void onResume() {
            super.onResume();
            adapter = new RVAdapter(persons);
            rv.setAdapter(adapter);
            Log.d(LOG_TAG, "onresume" + persons);
        }
           @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.menu_main, menu);
            return true;
        }
    
        @Override
        public void onSaveInstanceState(Bundle outState) {
            super.onSaveInstanceState(outState);
    
            outState.putSerializable("card", (Serializable) persons);
            Log.d(LOG_TAG, "save cards" + persons);
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            int id = item.getItemId();
    
            //noinspection SimplifiableIfStatement
            if (id == R.id.action_settings) {
    
                return true;
            }
    
            return super.onOptionsItemSelected(item);
        }
    }
    

    ProductCard活动

    import android.content.Intent;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.util.Log;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.Button;
    import android.widget.ImageButton;
    import android.widget.ImageView;
    import android.widget.Toast;
    
    /**
     * Created by Dmitry on 01.11.2015.
     */
    public class ProductCard extends AppCompatActivity implements AdapterView.OnItemClickListener {
        final String LOG_TAG = "myLogs";
        Button moneyOk_readylist;
        ImageButton addPhoto;
        ImageView imageView;
        private static int LOAD_IMAGE_RESULTS = 1;
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.product_card);
            moneyOk_readylist=(Button)findViewById(R.id.moneyOk_readylist);
            addPhoto=(ImageButton)findViewById(R.id.add_photo);
            imageView=(ImageView)findViewById(R.id.imageView);
            addPhoto.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View v) {
                    return false;
                }
            });
            addPhoto.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent i = new Intent(Intent.ACTION_PICK,
                            android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                    i.setType("image/*");
                    //i.setAction(Intent.ACTION_PICK);
                    startActivityForResult(Intent.createChooser(i,"Select picture"),1);
    
                }
            });
            moneyOk_readylist.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent=new Intent(ProductCard.this,MainActivity.class);
                    startActivity(intent);
                }
            });
    
        }
    
        @Override
    
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
    // Here we need to check if the activity that was triggers was the Image Gallery.
            // If it is the requestCode will match the LOAD_IMAGE_RESULTS value.
            // If the resultCode is RESULT_OK and there is some data we know that an image was picked.
            if (requestCode == 1 && resultCode == RESULT_OK && data != null) {
                // Let's read picked image data - its URI
    
                imageView.setImageURI(data.getData());
            }
    
    
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.menu_main, menu);
            return true;
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            int id = item.getItemId();
            switch (id) {
                case R.id.action_save_card:
                    Toast.makeText(ProductCard.this, "Карточка сохранена", Toast.LENGTH_SHORT).show();
                    Intent intent=new Intent(ProductCard.this,MainActivity.class);
                    startActivity(intent);
                    Log.d(LOG_TAG, "go to Main class" );
                    break;
                case R.id.action_delete_card:
                    Toast.makeText(ProductCard.this, "Карточка удалена", Toast.LENGTH_SHORT).show();
                    break;
    
            }
            return true;
        }
    
    
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    
        }
    }
    

0 个答案:

没有答案