2017-04-23 38 views
-1

我是Android編程的新手,我需要您的幫助。請。 我想要做什麼。對帶有標籤的活動使用不同文本的同一活動的列表視圖

我創建了listview,從listview我創建OnItemClickListener爲TabbedActivity。

現在我想讓每個listview項目在TabbedActivity上顯示不同的文本。

這是MainActivity:

public class MainActivity extends AppCompatActivity { 

Toolbar toolbar; 
ListView listview; 

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

    toolbar = (Toolbar) findViewById(R.id.toolbar); 
    toolbar.setTitle(getResources().getString(R.string.app_name)); 
    listview = (ListView) findViewById(R.id.listview); 

    ArrayAdapter<String> mAdapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, getResources().getStringArray(R.array.bolesti)); 

    listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int i, long id) { 
      switch (i){ 
       case 0: 
        Intent intent = new Intent(MainActivity.this, TabbedActivity.class); 
        startActivity(intent); 
        break; 
       case 1: 
        Intent intent1 = new Intent(MainActivity.this, TabbedActivity.class); 
        startActivity(intent1); 
        break; 
      } 

     } 
    }); 

    listview.setAdapter(mAdapter); 

}} 

TabbedActivity:

public class TabbedActivity extends AppCompatActivity { 

/** 
* 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; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_tabbed); 

    // 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); 

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

} 


@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_tabbed, 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.fragment_tabbed, container, false); 
     TextView textView = (TextView) rootView.findViewById(R.id.section_label); 
     textView.setText(getString(R.string.section_format, getArguments().getInt(ARG_SECTION_NUMBER))); 
     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). 
     switch (position){ 
      case 0: 
       Tab1Opis tab1 = new Tab1Opis(); 
       return tab1; 
      case 1: 
       Tab2Simptomi tab2 = new Tab2Simptomi(); 
       return tab2; 
      case 2: 
       Tab3Uzroci tab3 = new Tab3Uzroci(); 
       return tab3; 
      case 3: 
       Tab4Lijecenje tab4 = new Tab4Lijecenje(); 
       return tab4; 
      default: 
       return null; 
     } 
    } 

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

    @Override 
    public CharSequence getPageTitle(int position) { 
     switch (position) { 
      case 0: 
       return "Opis"; 
      case 1: 
       return "Simptomi"; 
      case 2: 
       return "Uzroci"; 
      case 3: 
       return "Lijecenje"; 
     } 
     return null; 
    } 
}} 

TabbedActivity包含4個選項卡,他們都有不同的.java類的例子:

public class Tab2Simptomi extends Fragment { 

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

我需要改變當我點擊不同的listview項目時,每個片段中的文本。

你能幫我嗎?謝謝。


查看照片。萬分感謝。

ListView 1

ListView 2

+1

您應該使用意向的羣衆演員將數據傳遞到另一個活動...請做一些研究和閱讀官方Android開發人員指南在問之前。 – Selvin

回答

1

您可以從下面的MainActivityTabbedActivity片段Tab2Simptomi通過text

textMainActivityTabbedActivity,使用Intent演員。如下面

更新onItemClick()

listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int i, long id) { 
     switch (i){ 
      case 0: 
       Intent intent = new Intent(MainActivity.this, TabbedActivity.class); 
       intent.putExtra("YOUR_TEXT", "Text One"); 
       startActivity(intent); 
       break; 
      case 1: 
       Intent intent1 = new Intent(MainActivity.this, TabbedActivity.class); 
       intent1.putExtra("YOUR_TEXT", "Text Two"); 
       startActivity(intent1); 
       break; 
     } 

    } 
}); 

2.通行證textTabbedActivityTab2Simptomi,設置bundle其片段的內側argumentsSectionsPagerAdapter

TabbedActivityonCreate()方法,得到text一個從MainActivity

public class TabbedActivity extends AppCompatActivity { 

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

     // Get text 
     String text = getIntent().getStringExtra("YOUR_TEXT"); 

     // Pass text to SectionsPagerAdapter 
     mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager(), text); 

     ............. 
     ......................  
    } 
} 

更新SectionsPagerAdapter通過傳遞textFragments

public class SectionsPagerAdapter extends FragmentPagerAdapter { 

    private String yourText; 

    public SectionsPagerAdapter(FragmentManager fm, String yourText) { 
     super(fm); 
     this.yourText = yourText; 
    } 

    @Override 
    public Fragment getItem(int position) { 

     Bundle bundle = new Bundle(); 
     bundle.putString("YOUR_TEXT", yourText); 

     switch (position){ 
      case 0: 
       Tab1Opis tab1 = new Tab1Opis(); 
       tab1.setArguments(bundle); // Pass text to Tab1Opis fragment     
       return tab1; 

      case 1: 
       Tab2Simptomi tab2 = new Tab2Simptomi(); 
       tab2.setArguments(bundle); 
       return tab2; 

      case 2: 
       Tab3Uzroci tab3 = new Tab3Uzroci(); 
       tab3.setArguments(bundle);      
       return tab3; 

      case 3: 
       Tab4Lijecenje tab4 = new Tab4Lijecenje(); 
       tab4.setArguments(bundle); 
       return tab4; 

      default: 
       return null; 
     } 
    } 

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

    @Override 
    public CharSequence getPageTitle(int position) { 
     switch (position) { 
      case 0: 
       return "Opis"; 
      case 1: 
       return "Simptomi"; 
      case 2: 
       return "Uzroci"; 
      case 3: 
       return "Lijecenje"; 
     } 
     return null; 
    } 
}} 

最後得到text從個人Frgament並做任何你想要的。

更新Tab2Simptomi如下:

public class Tab2Simptomi extends Fragment { 

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

     String finalText = getArguments().getString("YOUR_TEXT"); 

     // Do something with finalText 
     Toast.makeText(getActivity(), "Final Text: " + finalText, Toast.LENGTH_SHORT).show(); 

     return rootView; 
    } 
} 

UPDATE:

假設你的片段textsstatic

textsMainActivityTabbedActivity,使用Intent演員。如下面

更新onItemClick()

listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int i, long id) { 
     switch (i){ 
      case 0: 
       Intent intent = new Intent(MainActivity.this, TabbedActivity.class); 
       intent.putExtra("OPIS", "Item1 :: Text for Fragment OPIS"); 
       intent.putExtra("SIMPTOMI", "Item1 :: Text for Fragment SIMPTOMI"); 
       intent.putExtra("UZROCI", "Item1 :: Text for Fragment UZROCI"); 
       intent.putExtra("LIJECENJE", "Item1 :: Text for Fragment LIJECENJE"); 
       startActivity(intent); 
       break; 
      case 1: 
       Intent intent1 = new Intent(MainActivity.this, TabbedActivity.class); 
       intent1.putExtra("OPIS", "Item2 :: Text for Fragment OPIS"); 
       intent1.putExtra("SIMPTOMI", "Item2 :: Text for Fragment SIMPTOMI"); 
       intent1.putExtra("UZROCI", "Item2 :: Text for Fragment UZROCI"); 
       intent1.putExtra("LIJECENJE", "Item2 :: Text for Fragment LIJECENJE"); 
       startActivity(intent1); 
       break; 
     } 

    } 
}); 

2.通行證textsTabbedActivityTab2Simptomi,設置bundle其片段的內側argumentsSectionsPagerAdapter

TabbedActivityonCreate()方法,得到text一個從MainActivity

public class TabbedActivity extends AppCompatActivity { 

    ArrayList<String> stringArray; 

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

     stringArray = new ArrayList<String>(); 

     // Get texts 
     String textOPIS = getIntent().getStringExtra("OPIS"); 
     String textSIMPTOMI = getIntent().getStringExtra("SIMPTOMI"); 
     String textUZROCI = getIntent().getStringExtra("UZROCI"); 
     String textLIJECENJE = getIntent().getStringExtra("LIJECENJE"); 

     // Add text to ArrayList 
     stringArray.add(textOPIS); 
     stringArray.add(textSIMPTOMI); 
     stringArray.add(textUZROCI); 
     stringArray.add(textLIJECENJE); 

     // Pass ArrayList to SectionsPagerAdapter 
     mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager(), stringArray); 

     ............. 
     ......................  
    } 
} 

更新SectionsPagerAdapter通過傳遞textFragments

public class SectionsPagerAdapter extends FragmentPagerAdapter { 

    private ArrayList<String> stringList; 

    public SectionsPagerAdapter(FragmentManager fm, ArrayList<String> stringArray) { 
     super(fm); 
     this.stringList = stringArray; 
    } 

    @Override 
    public Fragment getItem(int position) { 

     Bundle bundle = new Bundle(); 
     bundle.putString("YOUR_TEXT", stringList.get(position)); // Get string from stringList using position 

     switch (position){ 
      case 0: 
       Tab1Opis tab1 = new Tab1Opis(); 
       tab1.setArguments(bundle); // Pass text to Tab1Opis fragment     
       return tab1; 

      case 1: 
       Tab2Simptomi tab2 = new Tab2Simptomi(); 
       tab2.setArguments(bundle); 
       return tab2; 

      case 2: 
       Tab3Uzroci tab3 = new Tab3Uzroci(); 
       tab3.setArguments(bundle);      
       return tab3; 

      case 3: 
       Tab4Lijecenje tab4 = new Tab4Lijecenje(); 
       tab4.setArguments(bundle); 
       return tab4; 

      default: 
       return null; 
     } 
    } 

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

    @Override 
    public CharSequence getPageTitle(int position) { 
     switch (position) { 
      case 0: 
       return "Opis"; 
      case 1: 
       return "Simptomi"; 
      case 2: 
       return "Uzroci"; 
      case 3: 
       return "Lijecenje"; 
     } 
     return null; 
    } 
}} 

最後得到text從個人Frgament並做任何你想要的。如下

更新Tab2Simptomi

public class Tab2Simptomi extends Fragment { 

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

     String finalText = getArguments().getString("YOUR_TEXT"); 

     // Do something with finalText 
     TextView yourTextView = (TextView) rootView.findViewById(R.id.your_textview); 
     // Show text on TextView 
     yourTextView.setText(finalText); 

     Toast.makeText(getActivity(), "Final Text: " + finalText, Toast.LENGTH_SHORT).show(); 

     return rootView; 
    } 
} 

希望這將有助於〜

+0

幫助,但沒有改變文字。請檢查我發佈的圖片。問候。謝謝。 –

+0

在您的問題中,您被問及4個片段上的相同文本,爲此,我的解決方案將完全符合我在設備中籤入的要求。如果您希望根據項目選擇在不同的選項卡上顯示不同的文本,則需要以相同的方式傳遞字符串數組列表。 – FAT

+0

從哪裏得到這些字符串?從數據庫或某處? – FAT

0

在MainActivity

listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int i, long id) { 
      Intent intent = new Intent(MainActivity.this, TabbedActivity.class); 
      switch (i){ 
       case 0: 
        intent.putExtra("Title", "Title1"); 
        break; 
       case 1: 
        intent.putExtra("Title", "Title2"); 
        break; 
      } 
      startActivity(intent); 
     } 
    }); 

在TabbedActivity,絃樂標題標題1或標題2基於什麼被點擊的MainActivity。

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

     String title = getIntent().getStringExtra("Title"); 
     Toast.makeText(this, ""+title, Toast.LENGTH_SHORT).show(); 

     // 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); 

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

    } 
} 
相關問題