MainActivity
public class MainActivity extends AppCompatActivity {
private FragmentManager fragmentManager;
private FragmentTransaction fragmentTransaction;
private Button AButton;
private Button BButton;
ArrayList<Element> itemList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
addItem();
switchFragment(Global.FRAGMENT_INDEX_A);
}
private void addItem() {
itemList = new ArrayList<>();
itemList.add(new Element("바나나", "500", "1", "바나나바나나바나나바나나"));
itemList.add(new Element("사과", "400", "2", "사과사과사과사과사과사과"));
itemList.add(new Element("배", "300", "3", "배배배배배배배"));
itemList.add(new Element("키위", "200", "4", "키위키위키위키위키위"));
itemList.add(new Element("아보카도", "100", "5", "아보카도아보카도아보카도아보카도아보카도"));
}
private void init() {
AButton = findViewById(R.id.btn_fragmentA);
BButton = findViewById(R.id.btn_fragmentB);
//첫화면 프래그먼트A0
AButton.setOnClickListener(onClick);
BButton.setOnClickListener(onClick);
}
private View.OnClickListener onClick = new View.OnClickListener() {
@Override
public void onClick(View v) {
if (v.equals(AButton)) {
switchFragment(Global.FRAGMENT_INDEX_A);
} else if (v.equals(BButton)) {
switchFragment(Global.FRAGMENT_INDEX_B);
}
}
};
public void switchFragment(int index) {
Fragment fragment = null;
Bundle data = new Bundle();
switch (index) {
case Global.FRAGMENT_INDEX_A:
fragment = new AFragment();
data.putParcelableArrayList(Global.FRAGMENT_KEY_DATA_LIST, itemList);
fragment.setArguments(data);
break;
case Global.FRAGMENT_INDEX_B:
fragment = new BFragment();
fragment.setArguments(data);
break;
default:
break;
}
fragmentManager = getSupportFragmentManager();
fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.frameLayout, fragment).commitAllowingStateLoss();
}
}
FragmentManager와 FragmentTransaction을 사용합니다.
데이터 이동은 Bundle 을 통하시면 됩니다.
ListAdapter
public class ListAdapter extends BaseAdapter {
// Adapter에 추가된 데이터를 저장하기 위한 ArrayList
private ArrayList<Element> itemList = new ArrayList<Element>();
private Context context;
private View.OnClickListener onClickItem;
// ListViewAdapter의 생성자
public ListAdapter(Context context, ArrayList<Element> itemList, View.OnClickListener onClickItemName) {
this.context = context;
this.itemList = itemList;
this.onClickItem = onClickItemName;
}
// Adapter에 사용되는 데이터의 개수를 리턴.
@Override
public int getCount() {
return itemList.size();
}
// position에 위치한 데이터를 화면에 출력하는데 사용될 View를 리턴.
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View cView = convertView;
ViewHolder holder;
if (cView == null) {
cView = LayoutInflater.from(context).inflate(R.layout.listview_custom, parent, false);
holder = new ViewHolder();
holder.nameText = cView.findViewById(R.id.nameText);
holder.priceText = cView.findViewById(R.id.priceText);
holder.sizeText = cView.findViewById(R.id.sizeText);
cView.setTag(holder);
} else {
holder = (ViewHolder) cView.getTag();
}
Element item = itemList.get(position);
holder.nameText.setText(item.getName());
holder.sizeText.setText(item.getSize());
holder.priceText.setText(item.getPrice());
holder.nameText.setTag(item);
holder.nameText.setOnClickListener(onClickItem);
return cView;
}
// 지정한 위치(position)에 있는 데이터와 관계된 아이템(row)의 ID를 리턴
@Override
public long getItemId(int position) {
return position;
}
// 지정한 위치(position)에 있는 데이터 리턴
@Override
public Object getItem(int position) {
return itemList.get(position);
}
// 아이템 데이터 추가를 위한 함수.
/* public void addItem(String name, String size, String price, String info) {
Element item = new Element(name, size, price, info);
itemList.add(item);
notifyDataSetChanged();
}*/
class ViewHolder {
TextView nameText;
TextView priceText;
TextView sizeText;
}
}
AFragment
public class AFragment extends Fragment {
private ArrayList<Element> itemList = null;
private ListView listView;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_a, container, false);
itemList = getArguments().getParcelableArrayList(Global.FRAGMENT_KEY_DATA_LIST);
init(view);
return view;
}
private void init(View view) {
listView = view.findViewById(R.id.listView);
final ListAdapter adapter = new ListAdapter(getActivity(), itemList, onClickItemName);
listView.setAdapter(adapter);
}
private View.OnClickListener onClickItemName = new View.OnClickListener() {
@Override
public void onClick(View view) {
Element item = (Element) view.getTag();
switchB(item);
}
};
private void switchB(Element item){
BFragment fragment = new BFragment();
Bundle bundle = new Bundle();
bundle.putParcelable(Global.FRAGMENT_KEY_DATA,item);
fragment.setArguments(bundle);
FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.frameLayout, fragment).commitAllowingStateLoss();
}
}
BFragment
public class BFragment extends Fragment {
private TextView nameText, priceText, sizeText, infoText;
private Element item;
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_b, container, false);
item = getArguments().getParcelable(Global.FRAGMENT_KEY_DATA);
if (item != null) {
String isName = item.getName();
String isPrice =item.getPrice();
String isSize = item.getSize();
String isInfo = item.getInfo();
Log.d("gg", "받은데이터 : 이름 : " + isName + " || 사이즈 : " + isSize + " || 가격 : " + isPrice + " || 정보 : " + isInfo);
nameText = v.findViewById(R.id.name);
sizeText = v.findViewById(R.id.size);
priceText = v.findViewById(R.id.price);
infoText = v.findViewById(R.id.info);
nameText.setText(isName);
sizeText.setText(isSize);
priceText.setText(isPrice);
infoText.setText(isInfo);
}
return v;
}
}
Global -keyData,index
public class Global {
public static final String FRAGMENT_KEY_DATA_LIST = "keyDataList";
public static final String FRAGMENT_KEY_DATA = "keyData";
public static final int FRAGMENT_INDEX_A = 0;
public static final int FRAGMENT_INDEX_B = 1;
}
Element -객체,parcelable
public class Element implements Parcelable {
private String name;
private String price;
private String size;
private String info;
public Element(String name, String price, String size, String info) {
this.name = name;
this.price = price;
this.size = size;
this.info = info;
}
protected Element(Parcel in) {
name = in.readString();
price = in.readString();
size = in.readString();
info = in.readString();
}
public static final Creator<Element> CREATOR = new Creator<Element>() {
@Override
public Element createFromParcel(Parcel in) {
return new Element(in);
}
@Override
public Element[] newArray(int size) {
return new Element[size];
}
};
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public String getSize() {
return size;
}
public void setSize(String size) {
this.size = size;
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel parcel, int i) {
parcel.writeString(name);
parcel.writeString(price);
parcel.writeString(size);
parcel.writeString(info);
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<FrameLayout
android:id="@+id/frameLayout"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@id/LinerLayout"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent">
</FrameLayout>
<LinearLayout
android:id="@+id/LinerLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/frameLayout">
<Button
android:id="@+id/btn_fragmentA"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="A" />
<Button
android:id="@+id/btn_fragmentB"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="B" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
listview_custom.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:id="@+id/linearLayout3"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:orientation="horizontal">
<TextView
android:id="@+id/nameText"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:gravity="center"
android:text="TextView" />
<TextView
android:id="@+id/sizeText"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginRight="10dp"
android:gravity="center"
android:text="TextView" />
<TextView
android:id="@+id/priceText"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginRight="10dp"
android:gravity="center"
android:text="TextView" />
</LinearLayout>
</LinearLayout>
fragment_a.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
fragment_b.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="150dp"
android:text="과일"
android:textColor="#2196F3"
android:textSize="50sp"
app:layout_constraintBottom_toTopOf="@id/frameLayout"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout
android:id="@+id/frameLayout"
android:layout_width="wrap_content"
android:layout_height="600dp"
android:layout_marginLeft="100dp"
android:layout_marginTop="50dp"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@id/name">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="크기 : "
android:textSize="30sp" />
<TextView
android:id="@+id/size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="리스트에서"
android:textSize="30sp" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="가격 : "
android:textSize="30sp" />
<TextView
android:id="@+id/price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="과일 클릭시"
android:textSize="30sp" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="정보 : "
android:textSize="30sp" />
<TextView
android:id="@+id/info"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="정보가 표출"
android:textSize="30sp" />
</LinearLayout>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
결과 순서 ( MainActivity , 데이터 전달전 BFragment , 데이터 전달후 BFragment -- 과일이름클릭시 이동)
'프로그래밍 > 안드로이드,xml' 카테고리의 다른 글
HttpRequest 관련 프로토콜 접속 오류 (0) | 2020.09.24 |
---|---|
리스트뷰 아래에서 위로 쌓기 (0) | 2020.09.24 |
Retropit2 저장용 (0) | 2020.05.29 |
seekbar와 progressbar 사이에 막대view 적용시켜보기 (0) | 2019.07.19 |
RelativeLayout 와 LinearLayout 뷰면적 ,상대적위치 (0) | 2019.07.09 |