获取listview项目

时间:2014-01-08 13:16:59

标签: android listview

我有一个listview,我通过下载用户推文来填充其项目,我正在尝试将项目(推文)发送到onClick的吐司,但我得到了奇怪的数据不是文本。

 public class FragmentTab1 extends SherlockFragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        i = (ListView) rootView.findViewById(R.id.listViewTweets);

        new LongOperation().execute("");

        i.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
               int position, long id) {

             // ListView Clicked item index
             itemPosition = position;

             // ListView Clicked item value
             itemValue =  adapter.getItem(position).toString();

              // Show Alert 
              Toast.makeText(getActivity().getApplicationContext(),
                "Position :"+itemPosition+"  ListItem : " +itemValue , 1000)
                .show();

            }

       }); 

        return rootView;
    }

    private class LongOperation extends AsyncTask<String, Void, String> {

        @Override
        protected String doInBackground(String... params) {

            Intent intent = getActivity().getIntent();

            String[] srch = new String[] {name};
            ResponseList<User> users = null;
                statusListTextOnly = new ArrayList<String>();
            } catch (TwitterException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            for (User user : users) {
              System.out.println("Friend's Name " + user.getName()); // this print my friends name
                  if (user.getStatus() != null) 
                  {
                  System.out.println("Friend timeline");
                  try {
                    statusess = twitter.getUserTimeline(name);
                } catch (TwitterException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                  }
            }  


                return null;
        }        

        @Override
        protected void onPostExecute(String result) {   
            List<Tweet> tweets = new ArrayList<Tweet>();

            Tweet[] stockArr = new Tweet[tweets.size()];

            adapter = new TweetAdapter(FragmentTab1.this.getActivity(),
                    R.layout.listview_item_row, stockArr);

            i.setAdapter(adapter);


        }

        @Override
        protected void onPreExecute() {  
          }

        @Override
        protected void onProgressUpdate(Void... values) {
        }
    }

目前:吐司是Position: 18 Listitem: xx.xxx.xxx.xx@416f985

xxx.xxx.xxx.xx `is my package name`

7 个答案:

答案 0 :(得分:2)

你得到如此奇怪的Toast的原因是因为包含Toast的文本是Tweet类型的对象。

您需要做的是从该对象获取文本。我不知道你的推文类看起来如何,但我认为它会是这样的:

itemValue =  adapter.getItem(position).title;

这样Toast将显示一个字符串而不是一个对象。

答案 1 :(得分:1)

你必须在'i'类型的对象中实现toString()方法。

例如

如果我是学生班的对象,如:

Class Student{
String name;
int marks;


public String toString(){
return ("Name="+name +"Marks="+marks);
}

如上所示,您必须实现toSTring方法。如果你没有在java / android中实现toString方法,那么默认的toString将返回带有@some地址的类名,就像它当前正在返回一样。

答案 2 :(得分:1)

onItemClick正在提供position变量,您可以使用该变量检索该位置的列表项。

答案 3 :(得分:1)

之前的答案解释了为什么你会得到一个“奇怪的吐司”,以解决这个问题,在tweetAdapter课程中你使用tweet.title作为string adapter.getItem(position).title; }。

所以试试这个:

adapter

由于TweetAdapter会获得通过tweet.title发送的项目,因此使用此处的{{1}}也会有效。

答案 4 :(得分:0)

试试这个

String  itemValue = ((TextView)view).getText().toString();

希望这有帮助。

答案 5 :(得分:0)

您可以使用

从setOnItemClickListener获取适配器
TweetAdapter mAdapter=((TweetAdapter)parent.getAdapter());

因此mAdapter.getItem(position)会有所帮助。

答案 6 :(得分:0)

你可以全局声明你的Tweet [] stockArr数组,并且可以在listview的onItemClick监听器中访问它 - :

stockArr(位置).getTweet()的toString();

您可以从上述解决方案中的Tweet对象访问任何内容。