Android 如果害怕使用大量的片段,那么最好的方法是什么呢
我正在开发一个大型游戏指南应用程序。网站的导航是通过导航抽屉进行的,抽屉上有一个按钮,上面有5个游戏。每个按钮都会将您带到要招募的角色的列表视图。我希望发生的是,当您单击列表项时,它会将您带到显示该角色信息的片段。但是每个游戏都有超过100个角色,这可能是个问题。应用程序的结构如下所示 MainActivity抽屉/活动>游戏1列表视图/片段>角色信息片段 角色信息片段尚未创建,因为我不确定如何进行。我对它做了很多研究,我觉得当单击ListView项时,我需要用字符片段替换ListView片段。但是我如何调用一个片段并将每个字符信息加载到该片段中呢。否则,我将不得不创建超过500个碎片…这是不对的。下面是ListView片段的代码 游戏1的SuikodenFragment-保留列表视图Android 如果害怕使用大量的片段,那么最好的方法是什么呢,android,listview,android-fragments,android-listview,Android,Listview,Android Fragments,Android Listview,我正在开发一个大型游戏指南应用程序。网站的导航是通过导航抽屉进行的,抽屉上有一个按钮,上面有5个游戏。每个按钮都会将您带到要招募的角色的列表视图。我希望发生的是,当您单击列表项时,它会将您带到显示该角色信息的片段。但是每个游戏都有超过100个角色,这可能是个问题。应用程序的结构如下所示 MainActivity抽屉/活动>游戏1列表视图/片段>角色信息片段 角色信息片段尚未创建,因为我不确定如何进行。我对它做了很多研究,我觉得当单击ListView项时,我需要用字符片段替换ListView片段。
public class SuikodenFragment extends Fragment implements OnItemClickListener {
ListView listView;
ArrayAdapter<Model> adapter;
List<Model> list = new ArrayList<Model>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.suikoden_main_activity1, container, false);
listView = (ListView) view.findViewById(R.id.my_list);
adapter = new SuikodenListAdapter(getActivity(),getModel());
listView.setAdapter(adapter);
listView.setOnItemClickListener(this);
return view;
}
@Override
public void onItemClick(AdapterView<?> arg0, View v, int position, long arg3) {
TextView label = (TextView) v.getTag(R.id.label);
CheckBox checkbox = (CheckBox) v.getTag(R.id.check);
Toast.makeText(v.getContext(), label.getText().toString()+" "+isCheckedOrNot(checkbox), Toast.LENGTH_LONG).show();
}
private String isCheckedOrNot(CheckBox checkbox) {
if(checkbox.isChecked())
return "is checked";
else
return "is not checked";
}
private List<Model> getModel() {
list.add(new Model("Tir (Hero)"));
...more characters follow...
}
}
我找到了我需要的东西。但正如我所说的,我不知道如何将字符数据加载到一个片段中。我是一个初学者,很抱歉,如果我说不通,我会尝试进一步解释,如果需要的话。谢谢 从片段中,您可以调用活动的方法,让活动决定要做什么;是替换列表还是启动新活动。对该方法进行了说明 解释 在onItemClick中,不处理导航(即创建和注入角色片段),而是调用指定的自定义接口的实例
public class CharacterListFragment extends Fragment {
public static interface OnSelectCharacterHandler() {
void onCharacterSelect(int id);
}
// your code goes here...
public void onItemClick(...) {
// get the characterId
((OnSelectCharacterHandler) getActivity()).onCharacterSelect(characterId);
}
}
在你的活动中
public class GameActivity extends Activity implements OnSelectCharacterHandler {
public void onCharacterSelect(int id) {
// inject the character fragment or start the activity.
}
}
建议
与其添加许多不同的片段/活动,为什么不尝试推广应用程序本身呢
根据您提供的信息,很明显,如果单个游戏中有100个角色3,用户可能实际上看不到您创建的所有100个角色3的详细信息,那么用户一次只会对一个或两个角色感兴趣
为了获得一个或两个角色的详细信息,下载一个30-40MB的应用程序会有些过分,因为常识要求访问该角色的游戏wiki并将其添加到浏览器中的脱机阅读列表中。这意味着你的应用程序失去了优势
因此,以下是一些建议,以使应用程序更易于实现和使用
在主视图1中显示游戏列表。使用NavigationDrawer/GridView/ListView/您可以命名它
对单个游戏的角色视图进行概括。2显示HP、MP,。。。
从source1填充通用字符视图。不需要为不同的字符创建不同的片段。
1:从远程url获取源,在本地缓存
2:你可以继续为其他游戏概括角色屏幕,或者为不同的游戏使用不同的视图
3:如果有n个游戏,那么在当前方法中创建的碎片将达到n*100
高级:不必在本地存储所有数据,一旦达到限制,您可以删除用户使用最少的数据。也许您可以使用一个片段来显示字符细节,而只是根据字符显示文本,不是吗?@Nickolaistatshonok我正是这么想的,但不知道该怎么做。我还是一个初学者,所以思考这些东西可能会有点让人困惑。这是最好的方法:阅读本文,了解如何在片段/活动之间传输数据。如果您使用的是Android Studio,那么通过默认模板创建的片段活动遵循相同的模式,@NickolaiAstashonok谢谢,我会再看一遍,因为我第一次肯定没有太注意它。谢谢!这非常有帮助!当您提到远程url时,您是指使用mysql数据库吗?因为我一直在调查。然后根据单击的字符加载正确的数据?@theCreed,远程url通常是一个REST客户端,从那里,您可以将数据与本地数据库同步。如果您想实现类似的功能,请参阅以下对话:。如果你认为这对你来说太多了,那么我建议你做一个简单的REST客户端,在深入潜水之前先学习平台。@TheScreed如果这回答了问题,那么请将其标记为已回答。