MainActivity에서 TabLayout의 선택된 Tab에 따라 해당 Fragment화면을 보여주는데요
Amart.java 파일에서 ListView로 아이템들 리스트를 보여주려 합니다.
앱 최초 실행시에는 원하는데로 리스트들이 나타나는데 다른 Tab을 선택하고 다시 A마트 Tab으로 오면 리스트가 안보입니다.
디버그옵션으로 실행해보니 앱 최초실행시에는 제대로 동작하다가 다른 Tab을 선택하고 다시 돌아오면 아이템들이 추가는 되는데 getView함수가 호출이 안됩니다.
폰에서 앱을 백그라운드에서도 종료시키고 다시 실행하면 다시 리스트들이 제대로 보입니다. 그리고 다시 다른 Tab으로 이동후 다시 돌아오면 아무것도 안보입니다.
오류가 발생하는것도 아니고 앱이 중지되거나 하는것도 아닙니다. 다른기능들은 정상작동합니다.
도와주세요ㅜㅜ 아래 코드 추가합니다.
아래 MainActivity의 Tab의 리스너에서 선택된 Tab의 Fragment로 이동합니다.
public class MainActivity extends AppCompatActivity {
Toolbar mToolbar;
DrawerLayout mDrawerLayout;
Amart amartMain;
Bmart bmartMain;
Cmart cmartMain;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
amartMain = new Amart();
bmartMain = new Bmart();
cmartMain = new Cmart();
TabLayout tabs = (TabLayout)findViewById(R.id.tabs);
tabs.addTab(tabs.newTab().setText("A 마트"));
tabs.addTab(tabs.newTab().setText("B 마트"));
tabs.addTab(tabs.newTab().setText("C 마트"));
tabs.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
public void onTabSelected(TabLayout.Tab tab) {
int position = tab.getPosition();
Log.d("MainActivity", "선택된 탭: " + position);
Fragment selected = null;
if(position == 0) {
selected = amartMain;
}else if(position == 1) {
selected = bmartMain;
}else if(position == 2) {
selected = cmartMain;
}
getSupportFragmentManager().beginTransaction().replace(R.id.container, selected).commit();
}
public void onTabUnselected(TabLayout.Tab tab) {
}
public void onTabReselected(TabLayout.Tab tab) {
}
});
}
A마트 Tab선택시 보여지는 Fragment를 상속받은 Amart.java입니다.
DB에서 값을 받아오고 해당 데이터를 adapter의 addItem함수를 호출해 아이템을 추가해 줍니다.
DB에서 값을 받아오는부분은 너무 길어서 빼고 올립니다.데이터를 받아오는부분은 Log찍어서 확인결과 정상적으로 다 받아오므로 그부분 오류는 아닌듯합니다.
public class Amart extends Fragment {
ListView mListView_A;
ListViewAdapter adapter_A;
adapter_A.addItem(drawable, name, norprice, curprice, rate);
}
리스트뷰아이템 클래스입니다.
public class ListViewItem {
private Drawable iconDrawable;
//private Bitmap bitmap;
private String pName;
private String norPrice;
private String curPrice;
private String disRate;
public void setIcon(Drawable icon) {
iconDrawable = icon;
}
public void setPName(String pname) {
pName = pname;
}
public void setNorPrice(String norprice) {
norPrice = norprice;
}
public void setCurPrice(String curprice) {
curPrice = curprice;
}
public void setDisRate(String disrate) {
disRate = disrate;
}
public Drawable getIcon() {
return this.iconDrawable;
}
public String getPName() {
return this.pName;
}
public String getNorPrice() {
return this.norPrice;
}
public String getCurPrice() {
return this.curPrice;
}
public String getDisRate() {
return this.disRate;
}
}
리스트뷰 어댑터 클래스입니다.
public class ListViewAdapter extends BaseAdapter {
ArrayList<ListViewItem> listViewItemList = new ArrayList<ListViewItem>();
ListViewItem listViewItem;
public int getCount() {
return listViewItemList.size();
}
public View getView(int position, View convertView, ViewGroup parent) {
final int pos = position;
final Context context = parent.getContext();
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.a_mart_list, parent, false);
}
ImageView pImgView = (ImageView) convertView.findViewById(R.id.listImg_Amart);
TextView pNameTextView = (TextView) convertView.findViewById(R.id.listPName_Amart);
TextView nPriceTextView = (TextView) convertView.findViewById(R.id.listNPrice_Amart);
TextView cPriceTextView = (TextView) convertView.findViewById(R.id.listCPrice_Amart);
TextView disRateTextView = (TextView) convertView.findViewById(R.id.listRate_Amart);
listViewItem = listViewItemList.get(position);
pImgView.setImageDrawable(listViewItem.getIcon());
pNameTextView.setText(listViewItem.getPName());
nPriceTextView.setText(listViewItem.getNorPrice());
cPriceTextView.setText(listViewItem.getCurPrice());
disRateTextView.setText(listViewItem.getDisRate());
return convertView;
}
public long getItemId(int position) {
return position;
}
public Object getItem(int position) {
return listViewItemList.get(position);
}
public void addItem(Drawable icon, String pName, String norPrice, String curPrice, String disRate) {
ListViewItem item = new ListViewItem();
Log.i("cccccccc:", pName);
item.setIcon(icon);
item.setPName(pName);
item.setNorPrice(norPrice);
item.setCurPrice(curPrice);
item.setDisRate(disRate);
listViewItemList.add(item);
Log.e("listViewItemList: ", listViewItemList.toString());
}
} |