簡體   English   中英

Intent getExtra開關案例,多個類

[英]Intent getExtra switch case, multiple classes

我想知道是否有可能向多個類發送額外的意圖,並使用switch語句查看發送了哪些額外的信息,並根據額外的信息更改回收者視圖數據。

例如,我的應用程序具有12個選項的可擴展列表視圖。 每個選項都將其發送到具有TabLayout和Recycler視圖的新類。 使用tablayout時,我為每個選項卡包含3個片段,其中當前為每個回收站視圖設置數據。 這很好用,但是我想知道如何在不為12個不同選項創建大量類的情況下做到這一點。

這是我的可擴展列表視圖代碼。 在第一個孩子位置,您可以看到我在說putExtra。

expandableListView.setAdapter(mAdapter);

    expandableListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
        @Override
        public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
            if (groupPosition == 0) {
                if (childPosition == 0) {
                    Intent intent = new Intent(getApplicationContext(), WorkoutDaysActivity.class);
                    intent.putExtra("value", "w29w1");
                    startActivity(intent);
                }
                if (childPosition == 1) {
                  Intent intent = new Intent(getApplicationContext(), WorkoutDaysActivity.class);
                    startActivity(intent);
                }
                if (childPosition == 2) {
                    Intent intent = new Intent(getApplicationContext(), WorkoutDaysActivity.class);
                    startActivity(intent);
                }
                if (childPosition == 3) {
                     Intent intent = new Intent(getApplicationContext(), WorkoutDaysActivity.class);
                     startActivity(intent);
                } else return false; }

這是我的WorkoutDaysActivity,通過單擊可擴展列表視圖,意圖將用戶發送給該用戶:

public class WorkoutDaysActivity extends BaseActivity {

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.workout_days);
    mToolBar = activateToolbar();
    setUpNavigationDrawer();

    ViewPager vp = (ViewPager) findViewById(R.id.view_pager);
    this.addPages(vp);

    TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
    tabLayout.setupWithViewPager(vp);
    tabLayout.setOnTabSelectedListener(listener(vp));

}

//ADD ALL PAGES
private void addPages(ViewPager pager) {
    MyFragPagerAdapter adapter = new MyFragPagerAdapter(getSupportFragmentManager());
    adapter.addPage(new MondayFragment());
    adapter.addPage(new WedFragment());
    adapter.addPage(new FridayFragment());

    //SET ADAPTER to pager
    pager.setAdapter(adapter);
}

private TabLayout.OnTabSelectedListener listener(final ViewPager pager) {
    return new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            pager.setCurrentItem(tab.getPosition());
        }

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

        }

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

        }
    };
}
}

這是我的標簽片段之一。 其他兩個基本相同:

public class WedFragment extends Fragment {

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.wed_fragment, null);

//        //RECYCLERVIEW
    RecyclerView rv = (RecyclerView) view.findViewById(R.id.mRecyclerWed);
    rv.setLayoutManager(new LinearLayoutManager(this.getActivity()));
    rv.setAdapter(new MyRecyclerAdapter(this.getActivity(), getWedWorkout()));

    return view;
}

private ArrayList<Workout> getWedWorkout() {
    //COLLECTION OF MONDAY WORKOUT

    ArrayList<Workout> workout = new ArrayList<>();


    //SINGLE EXERCISE
    Workout workouts = new Workout("Bench", "60", "6", "155", false);

    //ADD TO COLLECTION
    workout.add(workouts);

    workouts = new Workout("Bench", "70", "5", "175", false);
    workout.add(workouts);

    return workout;

}

@Override
public String toString() {
    return "Wednesday";
}
}

從理論上講,這3個片段類是我想放置一個開關盒以查看單擊了可擴展列表視圖中的哪個項目,並根據單擊的內容填充3個選項卡中的數據的地方。

謝謝您的幫助!

您可以將意圖發送的數據保存在列表或哈希圖中。

    ArrayList<String> list = new ArrayList<String>();
    list.add("w29w1");
    list.add("w29w2");
    ....

在onChildClick中:

expandableListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
    @Override
    public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
        Intent intent = new Intent(getApplicationContext(), WorkoutDaysActivity.class);
        intent.putExtra("value", list.get(childPosition));
        startActivity(intent);
    }

HashMap:

HashMap<Integer, String> map = new HashMap<Integer, String>();
map.put(0, "w29w1");
map.put(1, "w29w2");
...

Intent intent = new Intent(getApplicationContext(), WorkoutDaysActivity.class);
intent.putExtra("value", map.get(childPosition));
startActivity(intent);

編輯:WorkoutDaysActivity.class中使用該值

Intent intent = getIntent();
String value = intent.getStringExtra("value");

發送數據到片段:

private void addPages(ViewPager pager) {
     MyFragPagerAdapter adapter = new MyFragPagerAdapter(getSupportFragmentManager());
     MondayFragment mondayFragment = new MondayFragment();
     mondayFragment.setArguments(value);
     adapter.addPage(mondayFragment);
     ...

     pager.setAdapter(adapter);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM