2016-12-05 42 views
0

喜上午newbee Android和我現在所面臨的問題與選項卡活動 任何一個可以幫助...如何停止第二片面包中得到第一個選項卡中的活動會自動顯示

我附上截圖

問題面對 - 當我默認打開我的應用程序第一個選項卡顯示,但從第二個選項卡「第二個選項卡選擇...」的麪包顯示在第一個選項卡爲什麼發生這種情況?

第一標籤是home_fragment.java 2tab vehicle.java和烤麪包片從該車輛片段被顯示在家庭片段 和第三顯示在第二標籤片段

enter image description here

主activity.java

public class MainActivity extends AppCompatActivity { 

private static Button button; 
private static EditText editText; 
private static TextView textView; 

static DatabaseHelper databaseHelper; 
/** 
* The {@link android.support.v4.view.PagerAdapter} that will provide 
* fragments for each of the sections. We use a 
* {@link FragmentPagerAdapter} derivative, which will keep every 
* loaded fragment in memory. If this becomes too memory intensive, it 
* may be best to switch to a 
* {@link android.support.v4.app.FragmentStatePagerAdapter}. 
*/ 
private SectionsPagerAdapter mSectionsPagerAdapter; 

/** 
* The {@link ViewPager} that will host the section contents. 
*/ 
private ViewPager mViewPager; 

private int []tabicon={R.drawable.home,R.drawable.people,R.drawable.messege}; 

private TabLayout tabLayout; 

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

//  Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
//  setSupportActionBar(toolbar); 
    // Create the adapter that will return a fragment for each of the three 
    // primary sections of the activity. 
    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); 

    // Set up the ViewPager with the sections adapter. 
    mViewPager = (ViewPager) findViewById(R.id.container); 
    mViewPager.setAdapter(mSectionsPagerAdapter); 
    setupViewPager(mViewPager);/* new line*/ 

// DatabaseHelper databaseHelper=new DatabaseHelper(getBaseContext(),null,null,1); 

    tabLayout = (TabLayout) findViewById(R.id.tabs); 
    tabLayout.setupWithViewPager(mViewPager); 

    tabLayout.setSelectedTabIndicatorHeight(10); 

     tabLayout.getTabAt(0).setIcon(R.drawable.home); 
     tabLayout.getTabAt(1).setIcon(R.drawable.people); 
     tabLayout.getTabAt(2).setIcon(R.drawable.messege); 

    mViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); 
    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
     @Override 
     public void onTabSelected(TabLayout.Tab tab) { 
      mViewPager.setCurrentItem(tab.getPosition()); 
     } 

     @Override 
     public void onTabUnselected(TabLayout.Tab tab) { 

     } 

     @Override 
     public void onTabReselected(TabLayout.Tab tab) { 

     } 
    }); 

} 
private void setupViewPager(ViewPager viewPager) 
{ 
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
    adapter.addFragment(new Home_fragment(),"home"); 
    adapter.addFragment(new vehicle(),"vehicle"); 
    adapter.addFragment(new Message(),"Message"); 
    viewPager.setAdapter(adapter); 
} 

class ViewPagerAdapter extends FragmentPagerAdapter 
{ 
    private final List<Fragment> mfragmentList=new ArrayList<>(); 
    private final List<String>mfragmenttitlelist= new ArrayList<>(); 


    public ViewPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return mfragmentList.get(position); 
    } 

    @Override 
    public int getCount() { 
     return mfragmentList.size(); 
    } 

    public void addFragment(Fragment fragment,String s) 
    { 
     mfragmentList.add(fragment); 
     mfragmenttitlelist.add(s); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return mfragmenttitlelist.get(position); 
    } 
} 

@Override 
public void onBackPressed() { 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setCancelable(false); 
    builder.setMessage("Do you want to Exit?"); 
    builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      //if user pressed "yes", then he is allowed to exit from application 
      finish(); 
     } 
    }); 
    builder.setNegativeButton("No", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      //if user select "No", just cancel this dialog and continue with app 
      dialog.cancel(); 
     } 
    }); 
    AlertDialog alert = builder.create(); 
    alert.show(); 
} 


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

/** 
* A placeholder fragment containing a simple view. 
*/ 
public static class PlaceholderFragment extends Fragment { 
    /** 
    * The fragment argument representing the section number for this 
    * fragment. 
    */ 
    private static final String ARG_SECTION_NUMBER = "section_number"; 

    public PlaceholderFragment() { 
    } 

    /** 
    * Returns a new instance of this fragment for the given section 
    * number. 
    */ 
    public static PlaceholderFragment newInstance(int sectionNumber) { 
     PlaceholderFragment fragment = new PlaceholderFragment(); 
     Bundle args = new Bundle(); 
     args.putInt(ARG_SECTION_NUMBER, sectionNumber); 
     fragment.setArguments(args); 
     return fragment; 
    } 

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

/** 
* A {@link FragmentPagerAdapter} that returns a fragment corresponding to 
* one of the sections/tabs/pages. 
*/ 
public class SectionsPagerAdapter extends FragmentPagerAdapter { 

    public SectionsPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     // getItem is called to instantiate the fragment for the given page. 
     // Return a PlaceholderFragment (defined as a static inner class below). 
     return PlaceholderFragment.newInstance(position + 1); 
    } 

    @Override 
    public int getCount() { 
     // Show 3 total pages. 
     return 3; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     switch (position) { 
      case 0: 
       return "home"; 
      case 1: 
       return "vehicle"; 
      case 2: 
       return "Message"; 
     } 
     return null; 
    } 
} 
} 

Home_fragment.java

public class Home_fragment extends Fragment 
{ 
private EditText editText; 
private Button button; 
private TextView textView; 

static DatabaseHelper databaseHelper; 

@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    //return super.onCreateView(inflater, container, savedInstanceState); 

    View view=inflater.inflate(R.layout.fragment_home,container,false); 
    editText=(EditText) view.findViewById(R.id.search); 
    button=(Button)view.findViewById(R.id.search_btn); 
    textView=(TextView)view.findViewById(R.id.search_result); 

    databaseHelper=new DatabaseHelper(getContext(),null,null,1); 
    databaseHelper.getReadableDatabase(); 

    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      String string; 

      if (editText.getText().toString().isEmpty()) 
      { 
       Toast.makeText(getActivity(), "Please enter bike number", Toast.LENGTH_SHORT).show(); 
      } 
      else { 
       try { 

        string = databaseHelper.searchName(editText.getText().toString()); 

        textView.setText(string); 
       } catch (SQLiteException e) 
       { 
        e.printStackTrace(); 
        Toast.makeText(getActivity(), "Please enter name", Toast.LENGTH_SHORT).show(); 
       } 

      } 
      // return true; 
     } 
    }); 

    return view; 
} 
} 

vehical.java第二個片段

public class vehicle extends Fragment 
{ 
private ListView listView; 
private TextView textView; 
private ArrayAdapter<String> listadapter; 

// DatabaseHelper databaseHelper=new DatabaseHelper(getBaseContext(),null,null,1); 
//  databaseHelper.getWritableDatabase(); 


@Override 

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    //return super.onCreateView(inflater, container, savedInstanceState); 


    View view=inflater.inflate(R.layout.fragment_vehical,container,false); 
    listView=(ListView) view.findViewById(R.id.list_view); 
    textView=(TextView)view.findViewById(R.id.total_count); 

    final DatabaseHelper databaseHelper=new DatabaseHelper(getContext(),null,null,1); 
    //databaseHelper.getReadableDatabase(); 

    final ArrayList<String> arrayList=databaseHelper.readNames(); 
    final ArrayAdapter<String> arrayAdapter; 
    arrayAdapter = new ArrayAdapter<String>(getContext(),android.R.layout.simple_list_item_2,android.R.id.text1,arrayList); 
    arrayAdapter.notifyDataSetChanged(); 

    listView.setAdapter(arrayAdapter); 

    textView.setText("Total customer "+String.valueOf(listView.getCount())); 
    Toast.makeText(getActivity(), "2nd tab selected", Toast.LENGTH_SHORT).show(); 



    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) 
     { 
      listView.getItemAtPosition(position); 


      Toast.makeText(getActivity(), "Name selected: "+arrayList.get(position), Toast.LENGTH_SHORT).show(); 
      //databaseHelper.upDate(arrayList.get(position)); 
      // arrayList.get(position)=databaseHelper.upDate(arrayAdapter); 

     // Intent intent=new Intent(getActivity(),Add_customer.class); 
      // startActivity(intent); 
      //String name=parent.getSelectedItem(); 
     } 
    }); 



    FloatingActionButton fab = (FloatingActionButton) view.findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent intent = new Intent(getActivity(),Add_customer.class); 
      startActivity(intent); 
      Snackbar.make(view, "Customer form", Snackbar.LENGTH_LONG) 
        .setAction("Action", new Add_customer()).show(); 
     } 
    }); 



    // StringBuffer stringBuffer=databaseHelper.getData(); //get data from database in databasehelper.java 

// 
//    ArrayList<StringBuffer> cust_list= new ArrayList<>(stringBuffer); 
//    cust_list.addAll(Arrays.asList(stringBuffer)); 
//    listadapter=new ArrayAdapter<String>(vehicle.this,R.layout.fragment_vehical,cust_list); 
    return view; 

} 
} 
+1

歡迎堆棧溢出!請參閱[如何完成最小,完整和可驗證示例](/ help/mcve)。 –

回答

0
@Override 
public void setUserVisibleHint(boolean isVisibleToUser) { 
super.setUserVisibleHint(isVisibleToUser); 
} 

你可以使用你上面的片段中的方法就是在您ViewPager適配器

if(isVisibleToUser){ 
//dosomething when the fragment is visible 
}else{ 
//dosomething else 
} 

original post

0

這是因爲,這個片段所謂的時候ViewPager已完成其設置,即外加g從其適配器中獲取片段並顯示片段。

所以你需要做烘烤如果只有片段是可見的。

如果您使用碎片支持庫,那麼您可以使用getUserVisibleHint()或覆蓋setUserVisibleHint()來檢查碎片可見性。

你可以做到以下幾點:

public class MyFragment extends Fragment { 
    ... 
    @Override 
    public void setUserVisibleHint(boolean isVisibleToUser) { 
    super.setUserVisibleHint(isVisibleToUser); 
    if (isVisibleToUser) { 
     // Do toasting here. 
    } else { 
    } 
    } 
    ... 
} 

更多關於ViewPager和片段的知名度,檢查:How to determine when Fragment becomes visible in ViewPager

相關問題