单个活动可以用于多个动作吗?

时间:2019-06-18 16:55:46

标签: java android

作弊代码应用将包含游戏列表。当点击每个游戏时,将显示该游戏的作弊代码。我的问题是,我必须为列出的每个游戏创建一个活动,还是有办法使其在一个活动中起作用。

3 个答案:

答案 0 :(得分:2)

不需要,您不需要为列出的每个游戏进行单独的活动,而是可以使用RecyclerView和片段组合使其在一个活动中起作用。

在这里,我为游戏列表添加了一个recyclerView,当单击游戏列表中的项目时,recylerview将被隐藏,而frameLayout id(content)将填充该片段,并在按下后btn时而在片段内部将发生反向操作(隐藏片段并显示recyclerView)。

尽管如果所有游戏都具有相似的数据类型可以显示,那么整个方法可以大大简化, 在这种情况下,您可以将数据传递到片段,并使其仅能处理一个片段。

希望这个回答问题。

**

XML代码

**

<android.support.v7.widget.RecyclerView
            android:id="@+id/recycler"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
<FrameLayout
        android:id="@+id/content"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />

**

适配器代码

**

public abstract class SettingsAdapter extends RecyclerView.Adapter<SettingsAdapter.MyViewHolder> {

    private static final String TAG = "SettingsAdapter";
    private LayoutInflater inflater;
    private Context context;
    private List<SettingData> data;

    public SettingsAdapter(Context context , List<SettingData> data){
        inflater = LayoutInflater.from(context);
        this.data = data;
        this.context = context;
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = inflater.inflate(R.layout.custom_settings_row, parent, false);
        SettingsAdapter.MyViewHolder holder = new SettingsAdapter.MyViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
        SettingData current = data.get(position);
        holder.settinsName.setText(current.settingName);
        holder.hostRelativeLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                OnButtonClicked(v, position);
            }
        });
    }

    @Override
    public int getItemCount() {
        return data.size();
    }

    protected abstract void OnButtonClicked(View v ,int position);

    class MyViewHolder extends RecyclerView.ViewHolder {

        private final TextView settinsName;
        private final RelativeLayout hostRelativeLayout;

        public MyViewHolder(View itemView) {
            super(itemView);
            settinsName = itemView.findViewById(R.id.settings_name);
            hostRelativeLayout = itemView.findViewById(R.id.hostRelativeLayout);
        }
    }
}

**

onCreate内的android活动代码

**

SettingsAdapter settingsAdapter = new SettingsAdapter(this, getFinalData()) {
    @SuppressLint("RestrictedApi")
    @Override
    protected void OnButtonClicked(View v, int position) {
        switch (position) {
            case 0:
                settingsContent.setVisibility(View.GONE);
                fab.show();
                configAppbarTittle(StudentSettingsActivity.this, settingNameArr[position]);
                appBarLayout.setExpanded(false);
                getSupportFragmentManager().beginTransaction().replace(R.id.content, new SavedPlacesFragment()).commit();
                break;
            case 1:
                //similar
                break;
            case 2: 
                //similar
                break;
            case 3:
                //similar 
                break;
            default:
                break; 
        }

    }
};
settingsRecycleView.setAdapter(settingsAdapter);
settingsRecycleView.setLayoutManager(new LinearLayoutManager(this));

**

活动中的片段代码

**

@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public static class SavedPlacesFragment extends Fragment {

    private StudentSettingsActivity myMainActivity;
    private RecyclerView savedPlacesRecycler;


    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);
        myMainActivity = (StudentSettingsActivity) getActivity();

    }

    @SuppressWarnings("unchecked")
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        //myMainActivity = (StudentSettingsActivity) getActivity();
        View rootView = inflater.inflate(R.layout.stu_setting_saved_places_fragment, container, false);
        return rootView;
    }

    private void flush(String msg) {
        Toast.makeText(myMainActivity, msg, Toast.LENGTH_SHORT).show();
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == android.R.id.home) {
            myMainActivity.fab.hide();
            startActivity(new Intent(getActivity(), StudentSettingsActivity.class));
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

}
  

请理解以下事实:我已经复制了我的作品中的副本   代码在这里。只是为了演示方式。如果您复制粘贴此代码   将无法正常工作。您必须通读代码以了解方式   它已经实现,然后以您自己的方式编写

答案 1 :(得分:0)

...您说的是作弊代码应用包含游戏列表

您创建一个活动以显示列表

...。如果您点击列表以获取新游戏

因此,您必须创建片段或活动才能通过单击列表来显示游戏

答案 2 :(得分:0)

您可以创建一个活动,并使其包含多个片段。 您的活动(可以说MainActivity)将负责显示片段。 从总体上讲,您需要2个片段:

  

GameListFragment

  • 用于显示游戏列表和游戏项目单击。您将需要一个回收站视图以显示此片段上的游戏列表。
  

GameCheatCodeDetailsFragment

  • 用于显示作弊代码。

请参考SmartShows以获得一些代码参考。