0

当用户单击 listFragment 的项目时,我想启动配置文件活动。该列表显示有关用户的不同信息,例如:姓名、ID、排名...

我正在寻找的是一种访问有关单击的项目的信息并将列表中选择的用户的 id 传递给意图的方法。

AsyncTask 从服务器检索信息并调用适配器以在列表项中显示用户的详细信息。如果我在 onListItemClick 中使用:

    Object o=(Object)getListView().getItemAtPosition(position);
    Log.e("LikeAttend Report", "Clicked list item: " + position + " Content: " + o.toString());

日志返回:

点击列表项:1 内容:{score=7540, id=4, name= Gepp}

如何在方法中获取 id 值以将 Extra 添加到 Intent 并启动配置文件活动?

我在参考http://developer.android.com/reference/java/lang/Object.html中没有找到任何有用的东西

代码:

这是我迄今为止尝试过的:

public static class LikeFragmentList extends ListFragment 
    {
        private ListView listLike;

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
        {
            View likeView = inflater.inflate(R.layout.likelist, container, false);
            ProgressBar progress = (ProgressBar) likeView.findViewById(R.id.loading_spinner_like);
            String tabSocial="like";
            listLike = (ListView) likeView.findViewById(android.R.id.list);
            /*
             *  The asyncTask retrieves infos about the user list
             */
            new AsyncLoadSocial(getActivity(), progress, listLike).execute(uid,tabSocial);
            return likeView;

        }

        @Override
        public void onListItemClick(ListView listView, View view, int position, long id) 
        {
            super.onListItemClick (listView, view, position, id);
            // I've tried with object and cursor
            Object o = (Object) getListView().getItem(position);
            //Cursor cursor = (Cursor) getListAdapter().getItem(position); NullPointerException
            Log.e("LikeAttend Report", "Clicked list item: " + position + " Content: " +o.toString());

            Intent intent = new Intent(getActivity(), Profile.class);
            //intent.putExtra("id", o.toString(0)); NullPointerException
            getActivity().startActivity(intent);

        }
    }

Emmanuel提出的第一个解决方案。

在 ListFragmentList 中:

@Override
            public void onListItemClick(ListView listView, View view, int position, long id) 
            {
                super.onListItemClick (listView, view, position, id);
                String infos = getListView().getItemAtPosition(position).toString();
                String[] info = infos.split("=");
                Log.e("LikeAttend Report", "Clicked list item: " + position + " Content: total -> " + infos + " \n Info[2] is:" + info[2]);

                Intent intent = new Intent(getActivity(), Profile.class);
                //intent.putExtra("id", o.toString(0));
                getActivity().startActivity(intent);

            }

日志返回:

点击列表项:2 内容:total -> {score=0, id=12, photo=, name=Beatrice Fratocchi} Info[2] is: 12, photo

其中所需的信息是 12。

* 提出的第二种解决方案 *

    @SuppressWarnings("unchecked")
    @Override
    public void onListItemClick(ListView listView, View view, int position, long id) 
    {
        super.onListItemClick (listView, view, position, id);

        HashMap<String, String> map = (HashMap<String, String>) getListView().getItemAtPosition(position);
        Log.e("LikeAttend Report", "Clicked list item: " + position +" Content: \n" + map.get(TAG_ID).toString());

        Intent intent = new Intent(getActivity(), Profile.class);
        intent.putExtra("id", map.get(TAG_ID));
        getActivity().startActivity(intent);

    }
4

3 回答 3

1

您应该能够将生成的对象从getItemAtPosition()您填充适配器的任何内容中转换出来。从外观上看,这是一个HashMap<String, String>。因此,请尝试以下操作:

HashMap<String, String> map = (HashMap<String, String>) getListView().getItemAtPosition(position);

之后,您可以使用用于填充地图的相同键检索各个值:

String id = map.put(TAG_ID,id);
String score = map.put(TAG_SCORE, score);
String name = map.put(TAG_NAME, name);
String photo = map.put(TAG_PHOTO, photo);

只是一个想法:创建一个简单的 POJO 作为数据对象而不是映射可能更有意义。这样,您就不必将所有内容都存储为字符串。

于 2013-09-08T19:40:30.283 回答
1

您可以存储o.toString()在一个String变量中(我们称之为字符串)。然后您可以将string.split("=")其存储在一个String[](我们称之为 stringArray)中。id 属性对应的值将存储在stringArray[1].

于 2013-09-08T19:23:07.603 回答
0

我假设您在 AsyncTask 的某个地方创建了一个适配器,将项目添加到其中并将其设置在列表视图中。ListView 类中有一个名为getAdapter() 的方法,它返回一个ListAdapter。尝试在 onListItemClick 中获取该适配器的实例并调用 getItem(position) ,它将返回此列表视图项的用户对象(假设您的适配器实现使用您的 UserInfo 类在 getView 方法中填充列表项视图)

于 2013-09-08T19:25:24.210 回答