2014-01-08 4 views
-1

У меня есть 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: [email protected]

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

try String itemValue = (String) parent.getItemAtPosition (position).нанизывать(); –

+0

, очевидно, ваш Предмет, независимо от его класса, не имеет читаемого человеком метода toString, реализует его, и вы должны быть в порядке –

+0

Можете ли вы вставить код ListAdapter? –

ответ

2

Причина, по которой вы получаете такой странный тост, состоит в том, что текст, содержащий тост, является объектом типа Tweet.

Что вам нужно сделать, так это получить текст от этого объекта. Я не знаю, как ваш класс Твитнуть выглядит, но я думаю, что это будет что-то вроде этого:

itemValue = adapter.getItem(position).title; 

Таким образом Тост будет отображать строку, а не объект.

+0

спасибо Кевин, извините, не принял его cuz кто-то еще дал мне ответ –

+0

Я ответил ранее, это было 16 часов назад, и он ответил 15 часов назад. Я изменил свой ответ, потому что сделал .getTitle() и увидел, что в вашем коде это просто .title. Но это не имеет значения. Спасибо за +1! –

+0

О, извините, человек. Я принял ваш ответ, потому что думал, что я видел это. От него раньше, чем твое. –

1

Вы должны реализовать метод ToString() в объекте 'I' Type.

для , если например я являюсь объектом студенческого класса, как:

Class Student{ 
String name; 
int marks; 


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

Как показано выше, вы должны реализовать метод ToString. Если вы не реализуете метод toString в java/android по умолчанию, то toString возвращает имя класса с адресом @some, как в настоящее время, он возвращается.

+0

Но я не знаю, как связать эту идею с моим классом –

+0

Проблема в этой строке: String itemValue = (String) i.getItemAtPosition (position) .toString(); Здесь i является объектом класса, в котором вы должны переопределить метод toString(). Скажем, если i является объектом класса Student, тогда вы должны переопределить метод toString() в классе учеников. –

+0

Хорошо, но все же я не знаю, как использовать это с моим кодом, если я просто использую этот код toString(), он будет автоматически работать? * У меня нет моего компьютера, чтобы попробовать * –

1

onItemClick дает position переменную, которую вы можете использовать для извлечения элемента списка в этом положении.

+0

как это сделать? –

+0

Из массива твитов. – holtaf

+0

Код или более краткое объяснение помогли бы, потому что я плохо понимаю вас. –

0

Попробуйте

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

Надеется, что это помогает.

+2

без его кода вы не можете быть уверены, что элемент, который он на самом деле получает, - это текстовое представление, которое может привести к classcastexceptions. –

+0

umm, не работает –

0

Вы можете получить свой адаптер с setOnItemClickListener помощью

TweetAdapter mAdapter=((TweetAdapter)parent.getAdapter()); 

Так на mAdapter.getItem(position) поможет.

+0

Я получаю ** Тип несоответствия: невозможно преобразовать из захвата # 1-из? to TweetAdapter ** ошибка от parent.getAdapter(); –

+0

проверить мой отредактированный – user1621629

0

Вы можете объявить Tweet [] stockArr массив глобально и может получить доступ к нему в ListView в onItemClick слушателя, как -:.

stockArr (позиция) .getTweet() ToString();

Все, что вы можете получить от объекта Tweet из вышеуказанного решения.

+0

, который тоже не работает, я получаю ** Метод stockArr (int) не определен для типа new AdapterView.OnItemClickListener() {} ** из запасаArr –

1

ответы прежде, чем объяснить, почему вы получаете «странный тост» так, чтобы установить, что в вашем tweetAdapter классе вы используете tweet.title как string.

Так попробуйте это:

 adapter.getItem(position).title; 

Поскольку adapter получит элемент, отправленные через TweetAdapter, используя tweet.title здесь тоже будет работать.

+0

отлично работает! thnx человек –

Смежные вопросы