当前位置: 首页 > 知识库问答 >
问题:

如何在片段中加载字符串数组?

姬阳曜
2023-03-14

这是主活动中的数组

String[] items = {
            "Unit 1", "Unit 2", "Unit 3", "Unit 4", "Unit 5", "Unit 6", "Unit 7",
            "Unit 8", "Unit 9", "Unit10", "Unit 11", "Unit 12", "Unit 13"};
    ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, items);

这是我想要将该列表加载到片段中的onclick方法。

   bt2.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            FragmentManager fragmentManager = getSupportFragmentManager();
            android.support.v4.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            fragmentTransaction.replace(R.id.container, fragmentB);
            fragmentTransaction.addToBackStack("");
            fragmentTransaction.commit(); 

我有许多字符串数组,希望为菜单中的每个按钮分配一个。现在我应该把这个代码放在哪里?

ListView listView = (ListView) findViewById(R.id.listview);
listView.setAdapter(adapter);

共有2个答案

史绍晖
2023-03-14

首先,< code>listview必须是fragment布局的一部分,然后您可以在fragment的< code>onCreateView()方法中编写它。

onCreateView(LayoutInflater inflater, ViewGroup group, Bundle savedInstance){
View v = inflater.inflate(R.layout.fragment_layout, container, false);
String[] items = {"Unit 1", "Unit 2", "Unit 3", "Unit 4", "Unit 5", "Unit 6", "Unit 7", "Unit 8", "Unit 9", "Unit10", "Unit 11", "Unit 12", "Unit 13"};
ArrayAdapter adapter = new ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1, items);

ListView listView = (ListView) v.findViewById(R.id.listview);
listView.setAdapter(adapter);
return v;
}
公风史
2023-03-14

列表视图必须位于片段内,如果要通过单击不同的按钮将数据传递到片段,则应执行以下操作:

编辑

重要!

例如,此类仅遵循Android开发中的最佳实践)。

public class MainActivity extends FragmentActivity implements View.OnClickListener{

public static final String LISTVIEW_DATA = "myData";
public static final String DATA_TYPE1 = "DataType1";
public static final String DATA_TYPE2 = "DataType2";
public static final String DATA_TYPE3 = "DataType3";

Bundle bundle = null;

ArrayList<String> items1 = new ArrayList<String>();
ArrayList<String> items2 = new ArrayList<String>();
ArrayList<String> items3 = new ArrayList<String>();

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

    //set some data to the items
    items1 = generateStringData("Unit 1");
    items2 = generateStringData("Unit 2");
    items3 = generateStringData("Unit 3");

    Button btn1 = (Button) findViewById(R.id.button1);
    Button btn2 = (Button) findViewById(R.id.button2);
    Button btn3 = (Button) findViewById(R.id.button3);

    btn1.setOnClickListener(this);
    btn2.setOnClickListener(this);
    btn3.setOnClickListener(this);
}

private ArrayList<String> generateStringData(String prefix){
    ArrayList<String> temp = new ArrayList<String>();

    for (int i = 0; i<10; i++){
        temp.add(prefix + i);
    }

    return temp;
}

@Override
public void onClick(View view) {
    switch (view.getId()){
        case R.id.button1:
            bundle = new Bundle();
            bundle.putString(MainActivityFragment.DATA_TYPE, DATA_TYPE1);
            bundle.putStringArrayList(LISTVIEW_DATA, items1);
            break;
        case R.id.button2:
            bundle = new Bundle();
            bundle.putString(MainActivityFragment.DATA_TYPE, DATA_TYPE2);
            bundle.putStringArrayList(LISTVIEW_DATA, items2);
            break;
        case R.id.button3:
            bundle = new Bundle();
            bundle.putString(MainActivityFragment.DATA_TYPE, DATA_TYPE3);
            bundle.putStringArrayList(LISTVIEW_DATA, items3);
            break;
        default:
            break;
    }

    setListFragment(bundle);
}

private void setListFragment(Bundle arguments){
    Fragment fragment = new MainActivityFragment();

    if (arguments != null){
        fragment.setArguments(arguments);
    }

    FragmentManager fragmentManager = getSupportFragmentManager();
    android.support.v4.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.replace(R.id.container, fragment);
    fragmentTransaction.addToBackStack("");
    fragmentTransaction.commit();
}

当你点击按钮时,这段代码会把片段放在片段上,你可以通过点击后退按钮看到,这不是一个好主意。你应该根据自己的需要修改代码。

为片段设置参数后,必须接收片段内的数据:

public class MainActivityFragment extends Fragment {

public final static String DATA_TYPE = "DataType";

private ArrayList<String> data = new ArrayList<>();
private String dataTag = "";

public MainActivityFragment() {
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (getArguments() != null){
        data = getArguments().getStringArrayList(MainActivity.LISTVIEW_DATA);
        dataTag = getArguments().getString(DATA_TYPE);
    }

}

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

    ListView listView = (ListView) rootView.findViewById(R.id.listView1);

    ArrayAdapter adapter = new ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1, data);

    listView.setAdapter(adapter);

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int   i, long l) {

            switch (dataTag) {
                case MainActivity.DATA_TYPE1:
                    //here is where you can implement your logic for type 1
                    break;
                case MainActivity.DATA_TYPE2:
                    //here is where you can implement your logic for type 2
                    break;
                case MainActivity.DATA_TYPE3:
                    //here is where you can implement your logic for type 3
                    break;
                default:
                    //do something else
                    break;
            }

        }
    });

    return rootView;
}

希望有帮助。

 类似资料:
  • 问题内容: 这里有新用户。我有一部分这样的结构对象: 哪个切片像: 我想知道如何将结果切片转换为类似字符串的切片: 我试图像这样迭代: } 但是我得到: 因此,感谢您的帮助。 问题答案: 对于您的特定情况,我将“手动”执行: 输出: 如果希望它动态遍历所有字段,则可以使用该程序包。一个辅助函数可以做到这一点: 使用它: 输出是相同的: 在Go Playground上尝试示例。

  • 在这个方法中,我有一个字符串数组,即BarchartLabels。我想把这个数组添加到JSOObject中: {“数据”:“[\”一月\“,\”二月\“,\”三月\“,\”四月\“,\”五月\“,\”六月\“,\”七月\“]”}

  • 问题内容: 我在字符串中有一个完整的XML文档,想要一个对象。Google会产生各种垃圾。什么是最简单的解决方案?(在Java 1.5中) 解决方案 感谢Matt McMinn,我决定完成此实现。对我来说,它具有适当级别的输入灵活性和异常粒度。(很高兴知道错误是来自格式错误的XML-还是来自错误的IO- 。) 问题答案: 在Java 1.5中,这对我有效-我去除了一些特殊的可读性。

  • 问题内容: 我想将所有记录上的代码更新为当前的代码,再加上_standard任何想法? 因此,例如,如果代码是apple_1和apple_2,则我需要将它们设置为apple_1_standard和apple_2_standard 前: 伪查询: 预期结果: 问题答案: 您需要在MySQL中使用该函数进行字符串连接:

  • 我在我的应用程序中使用导航栏,每次我选择一个项目时,它都会加载一个片段。 我能够使用相同的文本字段和按钮保存片段的状态,但有一个片段可以加载地图、添加标记、集群并执行。 每次我转到另一个菜单项并返回时,它都会重新加载所有内容,例如AsyncTask、Cluster、Markers。我如何停止此片段以不再重新创建地图并在返回时保存状态: Udate 1:我更新了代码,但问题仍然存在 主要活动: 主片