我有一个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`
答案 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对象访问任何内容。