2014-01-30 3 views
5

뷰 페이저 탭에 조각 인 두 개의 목록보기가 있습니다. 목록보기에서 항목을 클릭하면 새 활동이 실행됩니다. 그러나 뒤로 가기 버튼을 눌러 탭 목록보기로 돌아 가면 목록보기가 두 배가되고 활동을 열고 다시 돌아 가면 다시 두 배로 늘리면됩니다. 또한 다섯 개의 탭이있는 다른 탭 목록보기가 있으며보기 중 하나에서 두 개의 탭을 이동할 때 표시됩니다. 내가 그 (것)들에 돌아올 때 그 전망에있는 품목은 두배이고 이것은 다른 모든 탭을 위해 동일이다. 두리스트 뷰의 코드는 동일합니다. 모든 목록 항목을 지우고보기 소유자 (else stack overflow answers)에서 "else"문으로 놀았 던 list.clear()를 시도했습니다. 그러나 매번 목록보기는 여전히 중복됩니다. 또한 당신이 이미 눈치 채지 못했다면 나는 안드로이드에 대해 꽤 새로운 사람입니다.안드로이드 : 새로운 액티비티를 시작하고 뒤로 돌아가려면 Listview 자체가 중복됩니다.

두 탭으로 구성된 활동에있는 목록보기 조각 (Due_Today_Fragment)의 코드입니다. 목록보기 항목 여기

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.Menu; 
import android.widget.TextView; 
import static com.bernard.beaconportal.Due_Today_Fragment.KEY_HOMEWORK; 
import static com.bernard.beaconportal.Due_Today_Fragment.KEY_DESC; 


public class homeworkdueDetailsActivity extends Activity { 

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

     String homework = ""; 
     String desc = ""; 

     Intent intent = getIntent(); 
     if (null != intent) { 
      homework = intent.getStringExtra(KEY_HOMEWORK); 
      desc = intent.getStringExtra(KEY_DESC); 
     } 

     TextView headlineTxt = (TextView) findViewById(R.id.texthomeworkdue); 
     headlineTxt.setText(homework); 

     TextView pubdateTxt = (TextView) findViewById(R.id.textdescription); 
     pubdateTxt.setText(desc); 

    } 


} 

는 문자열 정의 여기

import java.lang.reflect.Field; 
import com.actionbarsherlock.app.SherlockFragment; 
import com.astuetz.PagerSlidingTabStrip; 

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.view.ViewPager; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

public class Fragments2 extends SherlockFragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.viewpager_main, container, false); 
     // Locate the ViewPager in viewpager_main.xml 
     ViewPager pager = (ViewPager) view.findViewById(R.id.viewPager); 
     // Set the ViewPagerAdapter into ViewPager 
     pager.setAdapter(new ViewPagerAdapter(getChildFragmentManager())); 
     PagerSlidingTabStrip tabs = (PagerSlidingTabStrip) view.findViewById(R.id.pagerTabStrip); 
     tabs.setViewPager(pager); 

     return view; 
    } 

    @Override 
    public void onDetach() { 
     super.onDetach(); 
     try { 
      Field childFragmentManager = Fragment.class 
        .getDeclaredField("mChildFragmentManager"); 
      childFragmentManager.setAccessible(true); 
      childFragmentManager.set(this, null); 
     } catch (NoSuchFieldException e) { 
      throw new RuntimeException(e); 
     } catch (IllegalAccessException e) { 
      throw new RuntimeException(e); 
     } 
    } 
} 

인 탭 단편에 대한 코드를 클릭하면 다음

 import java.util.ArrayList; 
import java.util.List; 

import android.content.Intent; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ImageView; 
import android.widget.ListView; 
import android.widget.TextView; 


public class Due_Today_Fragment extends Fragment { 
    private List<homeworkdue> myhomeworkdue; 

    static class ViewHolder { 
     public ImageView imageView; 
     public TextView HomeworkDueText; 
     public TextView DescriptionText; 
     public TextView TeacherText; 
     } 


    public static final String KEY_HOMEWORK="homework"; 
    public static final String KEY_DESC="desc"; 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 
     return inflater.inflate(R.layout.activity_main, container, false); } 


    @Override 
    public void onResume() { 
     // TODO Auto-generated method stub 
     super.onResume(); 
     myhomeworkdue = new ArrayList<homeworkdue>(); 
     populatehomeworkdueList(); 
     populateListView(); 
     registerClickCallback(); 
    } 

    private void registerClickCallback() { 
     ListView list = (ListView)getView().findViewById(R.id.listView1); 
     list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

      public void onItemClick(AdapterView<?> parent, View viewClicked, int position, long id) { 

       homeworkdue clickedhomeworkdue = myhomeworkdue.get(position); 

       Intent intent = new Intent(getActivity(), homeworkdueDetailsActivity.class); 
       intent.putExtra(KEY_HOMEWORK, clickedhomeworkdue.getHomeworkdue()); 
       intent.putExtra(KEY_DESC, clickedhomeworkdue.getDesciption()); 

       startActivity(intent); 
      } 
     }); 
     } 


    private void populatehomeworkdueList() { 
     myhomeworkdue.add(new homeworkdue("History Homework", "Description 1", R.drawable.global_studies, "Anderson")); 
     myhomeworkdue.add(new homeworkdue("Math Homework", "Description 2", R.drawable.mathematics, "Klein")); 
     myhomeworkdue.add(new homeworkdue("English Homework", "Description 3", R.drawable.english, "Reed")); 
     myhomeworkdue.add(new homeworkdue("Spanish Homework", "Description 4", R.drawable.spanish, "Joya")); 
     myhomeworkdue.add(new homeworkdue("Science Homework", "Description 5", R.drawable.science, "Poole")); 
    } 

    private void populateListView() { 
     ArrayAdapter<homeworkdue> adapter = new MyListAdapter(); 
     ListView list = (ListView)getView().findViewById(R.id.listView1); 
     list.setAdapter(adapter); 


    } 


    public class MyListAdapter extends ArrayAdapter<homeworkdue> { 
     public MyListAdapter() { 
      super(getActivity(), R.layout.item_view, myhomeworkdue); 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      ViewHolder holder; 

      if(convertView==null){ 
      convertView = getActivity().getLayoutInflater().inflate(R.layout.item_view, parent, false); 
      holder = new ViewHolder(); 

      holder.imageView = (ImageView)convertView.findViewById(R.id.item_iconclass); 

      holder.HomeworkDueText = (TextView) convertView.findViewById(R.id.item_texthomeworkdue); 

      holder.DescriptionText = (TextView) convertView.findViewById(R.id.item_textdescription); 

      holder.TeacherText = (TextView) convertView.findViewById(R.id.item_textteacher); 

      convertView.setTag(holder); 


      } 

     else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 

     homeworkdue currenthomeworkdue = myhomeworkdue.get(position); 

     holder.imageView.setImageResource(currenthomeworkdue.getIconID()); 


     holder.HomeworkDueText.setText(currenthomeworkdue.getHomeworkdue()); 


     holder.DescriptionText.setText(currenthomeworkdue.getDesciption()); 


     holder.TeacherText.setText(currenthomeworkdue.getTeacher()); 

     return convertView; 

    } 

     } 


} 

출시 활성에 대한 코드 숙제를 위해

public class homeworkdue { 
    private String homework; 
    private String desc; 
    private int IconID; 
    private String teacher; 



    public homeworkdue(String homework, String desc, int IconID, String teacher) { 



     super(); 
     this.homework = homework; 
     this.desc = desc; 
     this.IconID = IconID; 
     this.teacher = teacher; 
    } 

    public String getHomeworkdue() { 
     return homework; 
    } 
    public String getDesciption() { 
     return desc; 
    } 
    public int getIconID() { 
     return IconID; 
    } 
    public String getTeacher() { 
     return teacher; 
    } 


    } 
여기

는 문자열이 일정

public class schedule { 
    private String band; 




    public schedule(String band) { 



     super(); 
     this.band = band; 

    } 

    public String Band() { 
     return band; 


    } 

} 

에 대해 정의 된 다섯 개 개의 탭

여기
import java.util.ArrayList; 
import java.util.List; 

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 


public class Thursday extends Fragment { 



    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 
     return inflater.inflate(R.layout.schedule_list_view, container, false); } 

    private List<schedule> myschedule = new ArrayList<schedule>(); 



    static class ViewHolder { 

     public TextView HomeworkDueText; 
     } 

    public void onStart() { 
     super.onStart(); 

     populatescheduleList(); 
     populateListView(); 

    } 


    private void populatescheduleList() { 
     myschedule.add(new schedule("E Band")); 
     myschedule.add(new schedule("G Band")); 
     myschedule.add(new schedule("F Band")); 
     myschedule.add(new schedule("H Band")); 
     myschedule.add(new schedule("A Band")); 
     myschedule.add(new schedule("C Band")); 
     myschedule.add(new schedule("D Band")); 
    } 

    private void populateListView() { 
     ArrayAdapter<schedule> adapter = new MyListAdapter(); 
     ListView list = (ListView)getView().findViewById(R.id.listView2); 
     list.setAdapter(adapter); 

    } 


    public class MyListAdapter extends ArrayAdapter<schedule> { 
      public MyListAdapter() { 
       super(getActivity(), R.layout.item_view, myschedule); 
      } 

      @Override 
      public View getView(int position, View convertView, ViewGroup parent) { 
       ViewHolder holder; 

       if(convertView==null){ 
        convertView = getActivity().getLayoutInflater().inflate(R.layout.schedule_list_item, parent, false); 
       holder = new ViewHolder(); 

       holder.HomeworkDueText = (TextView) convertView.findViewById(R.id.bandText); 

       convertView.setTag(holder); 
       } 

      else { 
       holder = (ViewHolder) convertView.getTag(); 
      } 

       schedule currenthomeworkdue = myschedule.get(position); 

       holder.HomeworkDueText.setText(currenthomeworkdue.Band()); 

      return convertView; 


     } 

     } 

} 

인에 포함 된 단편의 코드 당신이 더 이상 정보가 필요하면 그냥 물어 당신을 감사합니다 도움을 위해 사전에

나는이 버그를 이틀 동안 고치려고 노력해 왔으며, 나는 끝내고있다.

+1

향후 변경 될 참조 용 고정 코드 및 작동 코드가 포함되도록 변경했습니다. –

답변

9

조각이 만들어지면 새 List를 한 번 선언하기 때문에 조각을 다시 가져올 때 새 List를 선언하지 않고 이전 목록을 사용합니다. 그래서이 문제를 해결하기 위해 당신은이 개 부분에 다음 코드를 분리해야합니다

private List<homeworkdue> myhomeworkdue = new ArrayList<homeworkdue>(); 

부분은 당신의 조각에 onResume 간다 당신은 onResumeonStartonStart 모든 것을 제거하는 것이 필요합니다.

private List<homeworkdue> myhomeworkdue; 

onResume 나머지를 이동 :하지만 먼저이 같은 선언을 유지한다.

@Override 
protected void onResume() { 
    // TODO Auto-generated method stub 
    super.onResume(); 
    myhomeworkdue = new ArrayList<homeworkdue>(); 
    populatehomeworkdueList(); 
    populateListView(); 
    registerClickCallback(); 
} 

동일한 문제는 두 번째 동일 함으로 두 번째 동일합니다.

희망이 당신을 위해 작동합니다. 그것이 효과가 있다면 나에게 피드백을주십시오.

+1

그래,이 문제가 해결 될 것입니다 ... –

+0

응답 해 주셔서 감사합니다. 내가 혼란 스러울 때가 있습니다. "이전 코드의 일부를 이동하십시오"라고 말하면 어디로 옮겨야합니까? –

+0

'onResume'에 추가하는 것이 좋습니다. 명확하지 않은 경우 미안합니다. 내 대답을 편집 할게. 당신이 그것을 해결했는지 알려주세요. – Coderji

1

또는 단순히 clear() 메서드를 호출하십시오. 그것 없이는 새로운 데이터를 호출하는 동안 계속해서 거기에 남아 있습니다.