Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如果害怕使用大量的片段,那么最好的方法是什么呢_Android_Listview_Android Fragments_Android Listview - Fatal编程技术网

Android 如果害怕使用大量的片段,那么最好的方法是什么呢

Android 如果害怕使用大量的片段,那么最好的方法是什么呢,android,listview,android-fragments,android-listview,Android,Listview,Android Fragments,Android Listview,我正在开发一个大型游戏指南应用程序。网站的导航是通过导航抽屉进行的,抽屉上有一个按钮,上面有5个游戏。每个按钮都会将您带到要招募的角色的列表视图。我希望发生的是,当您单击列表项时,它会将您带到显示该角色信息的片段。但是每个游戏都有超过100个角色,这可能是个问题。应用程序的结构如下所示 MainActivity抽屉/活动>游戏1列表视图/片段>角色信息片段 角色信息片段尚未创建,因为我不确定如何进行。我对它做了很多研究,我觉得当单击ListView项时,我需要用字符片段替换ListView片段。

我正在开发一个大型游戏指南应用程序。网站的导航是通过导航抽屉进行的,抽屉上有一个按钮,上面有5个游戏。每个按钮都会将您带到要招募的角色的列表视图。我希望发生的是,当您单击列表项时,它会将您带到显示该角色信息的片段。但是每个游戏都有超过100个角色,这可能是个问题。应用程序的结构如下所示

MainActivity抽屉/活动>游戏1列表视图/片段>角色信息片段

角色信息片段尚未创建,因为我不确定如何进行。我对它做了很多研究,我觉得当单击ListView项时,我需要用字符片段替换ListView片段。但是我如何调用一个片段并将每个字符信息加载到该片段中呢。否则,我将不得不创建超过500个碎片…这是不对的。下面是ListView片段的代码

游戏1的SuikodenFragment-保留列表视图

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如果这回答了问题,那么请将其标记为已回答。