【问题标题】:How to get a String-Array of the whole ListView如何获取整个 ListView 的字符串数组
【发布时间】:2015-01-23 10:15:35
【问题描述】:

我有一个 ListView 并动态添加了 TextViews 以及如何在 String-Array 中获取 ListView 的所有 TextView 对象? 对于测试,我想在onItemClick方法中的Toast 中显示整个String-Array

创建:

final ListView sessionLv = (ListView) findViewById(R.id.session_list);
        sessionLv.setAdapter(sessionAdapter);
        sessionLv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                TextView c = (TextView) view.findViewById(R.id.stepTime);
                String playerChanged = c.getText().toString();


                Toast toast = Toast.makeText(getApplicationContext(),
                        playerChanged +" wurde angeklickt!",
                        Toast.LENGTH_SHORT);
                toast.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL, 0, 0);
                toast.show();

                }
        });

adapter 用于在我的 ListView 中动态添加的 TextView 对象

 class SessionItemAdapter extends ArrayAdapter<Map> {

        ArrayList<Map> values;
        Context context;

        SessionItemAdapter(Context context, ArrayList<Map> values) {
            super(context, R.layout.session_list_layout_row, values);
            this.values = values;
            this.context = context;
        }


        @Override
        public View getView(final int position, View view, ViewGroup parent) {
            LayoutInflater inflater = (LayoutInflater) parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View rowView = inflater.inflate(R.layout.session_list_layout_row, parent, false);

            TextView tv = (TextView) rowView.findViewById(R.id.stepTime);
            final int rowId = (Integer) values.get(position).get("id");
            int beepStringId = getResources().getIdentifier("exercise_typ_" + values.get(position).get("type"), "string", getPackageName());

            rowView.setTag(rowId);

            tv.setText(getResources().getString(beepStringId));

            ImageButton deleteSession = (ImageButton) rowView.findViewById(R.id.session_item_del);
            deleteSession.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    /*if (!startStopToggle.isChecked()) {*/
                        sessionAdapter.remove(values.get(position));
                    sessionAdapter.notifyDataSetChanged();


                }
            });

            return rowView;
        }

【问题讨论】:

  • 您好,从您的代码中我了解到您想要显示所有 TextViews 的所有字符串,为什么不使用适配器来获取整个字符串,您可以添加一个函数并迭代您的值列表并从每个地图返回字符串,就像您在 getView 中所做的一样
  • 你能举个例子吗?我现在搜索了几个小时,找不到任何东西。是getCount 吗?

标签: android arrays string listview android-listview


【解决方案1】:

希望这会有所帮助,

//in your item click
sessionLv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        SessionItemAdapter adapter = (SessionItemAdapter) parent.getAdapter();
        List<String> allPlayers = adapter.getAllPlayers();

        // Log your list or whatever you want to do with it
        Log.i(TAG, "allPlayers: " + allPlayers.toString());

    }
});
//in your adapter getAllPlayers() would be something like this
public List<String> getAllPlayers(){
    List<String> list=new ArrayList<String>();
    for (Map item : values) {           
        int beepStringId = context.getResources().getIdentifier("exercise_typ_" 
        + item.get("type"), "string", context.getPackageName());
        String str = context.getResources().getString(beepStringId);
        list.add(str);
    }
    return list;
}

【讨论】:

  • 我现在想将 List&lt;String&gt; 从我的 Activity 传递给 Fragment。但它不起作用。我在这里将其作为新答案发布,也许您可​​以帮助我为什么它不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-22
  • 2020-02-26
  • 1970-01-01
  • 2012-12-11
  • 2011-05-13
  • 1970-01-01
相关资源
最近更新 更多