마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

리사이클러 뷰 전체 다른 액티비티에 넘기기

0 추천

제가 클릭이벤트로 modify액티비티의 리사이클러뷰에 있는 아이템들 전체를 mainactivity에 인텐트로 옮기려고 하는데 intent를 어떻게 작성해야할지 감도 안잡히네요 ㅎ;; 혹시 이런건 어떻게 해야할지 아시는분 계신가요

밑은 일단 시도해본 결과입니다 물론 되지는 않습니다

modify.java

public class modify extends AppCompatActivity {


    private ArrayList<MainData> arrayList;
    private MainAdapter mainAdapter;
    private RecyclerView recyclerView;
    private LinearLayoutManager linearLayoutManager;
    Dialog dialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.modify);

        recyclerView = (RecyclerView)findViewById(R.id.rv);
        linearLayoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(linearLayoutManager);

        arrayList = new ArrayList<>();

        mainAdapter = new MainAdapter(arrayList);
        recyclerView.setAdapter((mainAdapter));

        Button addbtn = (Button)findViewById(R.id.add);
        addbtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
               dialog = new Dialog(modify.this);
               dialog.setContentView(R.layout.add_dialog);
               showDialog();
            }
        });
        Button enrollbnt =(Button)findViewById(R.id.enroll);
        final EditText name = (EditText)findViewById(R.id.name);
        enrollbnt.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v){
                Intent intent = new Intent(getApplicationContext(), MainActivity.class);
                if(name == null){
                    intent.putExtra("name", "미정");
                }
                else{
                    intent.putExtra("name", name.getText().toString());
                }
                intent.putExtra("plan", arrayList);
                startActivity(intent);
            }
        });
    }
    public void showDialog(){
        dialog.show();
        final EditText mTitle =(EditText) dialog.findViewById(R.id.mtitle);
        final EditText mContext = (EditText) dialog.findViewById(R.id.mcontext);
        final EditText begin =(EditText) dialog.findViewById(R.id.begin);
        final EditText end =(EditText) dialog.findViewById(R.id.end);
        final RadioButton h =(RadioButton) dialog.findViewById(R.id.h);
        final RadioButton m =(RadioButton) dialog.findViewById(R.id.m);
        final RadioButton l =(RadioButton) dialog.findViewById(R.id.l);
        Button yes = (Button) dialog.findViewById(R.id.yes);
        Button no = (Button) dialog.findViewById(R.id.no);

     

        yes.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view){

                String title = mTitle.getText().toString();
                String ft = begin.getText().toString()+" ~ "+end.getText().toString();
                String context = mContext.getText().toString();
                MainData mainData;
                if(h.isChecked()){
                    mainData = new MainData(R.drawable.h, title, ft, context);
                }
                else if(m.isChecked()){
                    mainData = new MainData(R.drawable.m, title, ft, context);
                }
                else{
                     mainData = new MainData(R.drawable.l, title, ft, context);
                }
                arrayList.add(mainData);
                mainAdapter.notifyDataSetChanged();

                dialog.dismiss();
            }
        });
        no.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dialog.dismiss();
            }
        });



    }

}

main

package com.example.plannerapp;

public class MainActivity extends AppCompatActivity {

    private ArrayList<MainData> arrayList;
    private MainAdapter mainAdapter;
    private RecyclerView recyclerView;
    private LinearLayoutManager linearLayoutManager;

    long now = System.currentTimeMillis();
    Date date = new Date(now);
    SimpleDateFormat sdfNow = new SimpleDateFormat("yyyy/MM/dd");
    String formatDate = sdfNow.format(date);
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView date = (TextView)findViewById(R.id.date);
        date.setText(formatDate);
        TextView name =(TextView)findViewById(R.id.name);
        recyclerView = (RecyclerView)findViewById(R.id.rv);
        linearLayoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(linearLayoutManager);
        arrayList = new ArrayList<>();
        mainAdapter = new MainAdapter(arrayList);
        recyclerView.setAdapter((mainAdapter));
        Intent intent = getIntent();
        String planName = intent.getExtras().getString("name");
        name.setText(planName);
        arrayList =(ArrayList<MainData>) intent.getSerializableExtra("plan");


    }



}

 

pdj (180 포인트) 님이 2020년 11월 28일 질문

1개의 답변

+1 추천
 
채택된 답변

ModifyActivity에서 startActivity할 때  ModifyActivity에 있는 리사이클러뷰의 데이터소스를 Intent로 전달하시면 됩니다. 

pubic class MyData implements Parcelable {

}

public class ModifyActivity .. {

    
   // private ArrayList <MyData> listitems;
    

    private void updteRecyclerViewItems(items: ArrayList <MyData>) {
           // or 
           //listitems = items
           recyclerViewAdapter.setItems(items)
         
          
    }
   
    private void navigateToMainActivity() {
        startMainActivity(recyclerViewAdapter.getItems());
       // or
       // startMainActivity(listitems);
   }
}


public class MainActivity ... {

     private static final KEY_LIST_ITEMS = "KEY_LIST_ITEMS"

     public static void startMainActivity(context: Context, listItems: ArrayList<MyData>) {
           Intent intent = new Intent(context, MainActivity.class);
           intent. putParcelableArrayListExtra(KEY_LIST_ITEMS, listItems);
           context.startActivity(intent);
     }


    public void onCreate(saveInstance: Bundle) {
         super.onCreate(saveInstance);

       ArrayList<MyData> listitem = ( ArrayList<MyData>) getParcelableArrayListExtra(KEY_LIST_ITEMS);
      if (listitems == null) {  
            throw new IllegalArgumentException("List item must not be null");
      }

     doSomethingWith(listitems);
    }
}

ModifyActivity에서 리사이클러뷰의 아이템을 멤버변수에 저장하시거나 adapter에 저장하신 다음, MainActivity의 인텐트로 넘겨줍니다. 한가지 주의하실 점은 MyData 클래스가 Parcelable을  implement해야 한다는 겁니다. 매뉴얼로 하기에는 상당히 귀찮은 코드이기 때문에 안드로이드 스튜디오에서 제공하는 기능이나 플러그인을 사용하시면  boilerplate 코드를 대신 작성해 줄겁니다. 이걸 MainActvity의 인텐트에서 받아서 사용하시면 됩니다.

spark (227,470 포인트) 님이 2020년 11월 29일 답변
pdj님이 2020년 11월 29일 채택됨
와 그렇네요 전달받을라고만했지 애초에 주면 되는 거였군요 당신의 답변에 무릎을 탁 치고 갑니다.
...