메인의 다이얼로그 종료 시 리사이클러뷰에 항목이 추가되도록 하고싶습니다.
어떻게 할 수 있을까요?
어떤 클래스, 메소드를 이용하지만이라도 알고싶습니다.
MyRecyclerAdapter.java
public class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.ViewHolder> {
public static Context mContext;
private final List<CardItem> mDataList;
private MyRecyclerViewClickListener mListener;
// Adapter 초기화 및 생성자로 받은 데이터기반으로 Adapter 내 데이터 세팅
public MyRecyclerAdapter(List<CardItem> dataList) {
mDataList = dataList;
}
// ViewHolder가 초기화 될 때 혹은 ViewHolder를 초기화 할 때 실행되는 메서드
// 뷰 홀더를 생성하는 부분. 레이아웃을 만드는 부분
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_card, parent, false);
return new ViewHolder(view);
}
// RecyclerView의 Row 하나하나를 구현하기위해 Bind(묶이다) 될 때
// 뷰 홀더에 데이터를 설정하는 부분
@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
CardItem item = mDataList.get(position);
TextView state = holder.state;
TextView setting = holder.setting;
holder.state.setText(item.getState());
holder.setting.setText(item.getSetting());
// 클릭 이벤트
if (mListener != null) {
// 현재 위치
final int pos = holder.getAdapterPosition();
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mListener.onItemClicked(pos);
removeAt(position);
}
});
}
@Override
public int getItemCount() {
return mDataList.size();
}
public void setOnClickListener(DialogInterface.OnClickListener onClickListener) {
}
public void removeAt(int position) {
mDataList.remove(position);
notifyItemRemoved(position);
notifyItemRangeChanged(position, mDataList.size());
}
public void notifyItemInserted(int which, CardItem cardItem) {
}
// 각각의 아이템의 레퍼런스를 저장할 뷰 홀더 클래스
// 반드시 RecyclerView.ViewHolder를 상속해야 함
public class ViewHolder extends RecyclerView.ViewHolder {
TextView state, setting;
public ViewHolder(View itemView) {
super(itemView);
state = (TextView) itemView.findViewById(R.id.text_eat_state);
setting = (TextView) itemView.findViewById(R.id.text_init_setting);
itemView.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Toast.makeText(mContext, "click" , Toast.LENGTH_LONG).show();
}
});
}
}
public void setOnClickListener(MyRecyclerViewClickListener listener) {
mListener = listener;
}
public interface MyRecyclerViewClickListener {
// 아이템 전체 부분의 클릭
void onItemClicked(int position);
}
}
MainActivity.java
public class MainActivity extends AppCompatActivity implements MyRecyclerViewClickListener {
// TODO 타임라인형식
private MyRecyclerAdapter mAdapter;
RecyclerView recyclerView;
List<CardItem> dataList;
// 다이얼로그 선택된 값
final int[] selectedItem = {0};
// 설정 페이지에서 저장된 값 표시
TextView data_view;
// 메인
@SuppressLint("ResourceType")
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 툴바
Toolbar mytoolbar = ( Toolbar ) findViewById(R.id.my_toolbar);
setSupportActionBar(mytoolbar);
getSupportActionBar().setTitle("");
// 상태바 색 변경
View view = getWindow().getDecorView();
view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
getWindow().setStatusBarColor(Color.parseColor(getResources().getString(R.color.colorPrimaryPurle)));
// 설정페이지로부터 저장되있는 값 받음 AA = 설정페이지에서 설정한 값
Intent intent = getIntent();
String AA = intent.getStringExtra("settingData");
data_view = ( TextView ) findViewById(R.id.data_view);
data_view.setText(AA);
RecyclerView recyclerView = ( RecyclerView ) findViewById(R.id.recycler_view);
recyclerView.setHasFixedSize(false);
// 레이아웃 매니저로 LinearLayoutManager를 설정
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
// 표시할 임시 데이터
List<CardItem> dataList = new ArrayList<>();
dataList.add(new CardItem("하죶나","빡치네"));
dataList.add(new CardItem("하죶나","빡치네"));
dataList.add(new CardItem("하죶나","빡치네"));
// 어댑터 설정
mAdapter = new MyRecyclerAdapter(dataList);
mAdapter.setOnClickListener(( MyRecyclerViewClickListener ) this);
recyclerView.setAdapter(mAdapter);
// 구분선
// 이쁘면 메뉴얼쪽에도 추가하자
DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(getApplicationContext(), new LinearLayoutManager(this).getOrientation());
recyclerView.addItemDecoration(dividerItemDecoration);
}
// 클릭 이벤트
@Override
public void onItemClicked(int position) {
Toast.makeText(getApplicationContext(), position + "번째 삭제", Toast.LENGTH_LONG).show();
}
private View.OnClickListener leftListener = new View.OnClickListener() {
public void onClick(View v) {
}
};
// 메뉴.xml
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
return true;
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// 툴바 탭 클릭 이벤트
switch (item.getItemId()) {
case R.id.action_auto:
// 수동버튼 클릭 시
// 식사상태 선택 팝업창 열림
final String[] items = {"아침식전", "점심식전", "저녁식전", "취침전"};
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("식사상태를 선택해주세요.");
builder.setSingleChoiceItems(items, 0, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
selectedItem[0] = which;
}
});
builder.setPositiveButton("확인", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// Toast.makeText(MainActivity.this, items[selectedItem[0]], Toast.LENGTH_SHORT).show();
if (data_view.getText().toString() == "") {
// 설정을 안한 경우
Toast.makeText(getApplicationContext(), "설정부터하세요.", Toast.LENGTH_SHORT).show();
} else {
여기 다이얼로그입니다.!!