Как получить конкретную строку из элемента ListView - PullRequest
2 голосов
/ 28 ноября 2011

Что я пытаюсь сделать


Здравствуйте, ребята, я создаю приложение для моего друга, я просто показываю его канал в своем приложении.Я получаю данные видео через JSON.

Теперь я нашел проблему.Когда я заполняю данные в свой ListView через SimpleListAdapter и пытаюсь получить их через OnItemClickListner и извлекать их через lv.getItemAtPosition(position);, я получаю все данные, которые хранятся в определенной строке.Но мне нужна только ссылка / URL, которые я сохранил в этом поле.

Вопрос


Как вы прочитали, я получил более одной информации в моем ListView, чтобы бытьровно четыре строки (Thumb, Title, Content, Link).Но мне нужно только получить строку ссылки, как я могу это сделать, здесь вы найдете код.

код


test2.java

package de.stepforward;

import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


import org.apache.http.NameValuePair;
import org.json.JSONArray;
import org.json.JSONObject;



import android.app.ListActivity;
import android.database.Cursor;
import android.media.RingtoneManager;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.Toast;

public class test2 extends ListActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);


    String result = "";
    String line = null;
    ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();


    //get the Data from URL
    try{
    URL url = new URL("http://gdata.youtube.com/feeds/mobile/users/TheStepForward/uploads?alt=json&format=1"); 

    URLConnection conn = url.openConnection();
    StringBuilder sb = new StringBuilder();
    BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));

    //read d response till d end
    while ((line = rd.readLine()) != null) {
    sb.append(line + "\n");
    }
    result = sb.toString();
    Log.v("log_tag", "Append String " + result);
    } catch (Exception e) {
    Log.e("log_tag", "Error converting result " + e.toString());
    }

    try{
        JSONObject json = new JSONObject(result);
        JSONObject feed = json.getJSONObject("feed");
        JSONArray entrylist = feed.getJSONArray("entry");

        for(int i=0;i<entrylist.length();i++){
            //Get Title
            JSONObject movie = entrylist.getJSONObject(i);
            JSONObject title = movie.getJSONObject("title");
            String txtTitle = title.getString("$t");
            Log.d("Title", txtTitle);

            //Get Description
            JSONObject content = movie.getJSONObject("content");
            String txtContent = content.getString("$t");
            Log.d("Content", txtContent);

            //Get Link
            JSONArray linklist = movie.getJSONArray("link");
            JSONObject link = linklist.getJSONObject(0);
            String txtLink = link.getString("href");
            Log.d("Link", txtLink);


            //Get Thumbnail
            JSONObject medialist = movie.getJSONObject("media$group");
            JSONArray thumblist = medialist.getJSONArray("media$thumbnail");
            JSONObject thumb = thumblist.getJSONObject(2);
            String txtThumb = thumb.getString("url");
            Log.d("Thumb", txtThumb.toString());


            //String Array daraus machen und in Hashmap füllen
            HashMap<String, String> map = new HashMap<String, String>();
            map.put("Thumb", txtThumb);
            map.put("Title", txtTitle);
            map.put("Content", txtContent);
            map.put("Link", txtLink);
            mylist.add(map);

        }
        //ListView füllen
        ListAdapter adapter = new SimpleAdapter(this, mylist , R.layout.lit, 
                new String[] { "Thumb","Title","Content","Link"}, 
                new int[] { R.id.img_video,R.id.txt_title,R.id.txt_subtitle});      
        setListAdapter(adapter);


        //OnClickLister um Youtube-Video zu öffnen
        final ListView lv = getListView();
            lv.setOnItemClickListener(new OnItemClickListener(){
                public void onItemClick(AdapterView<?> parent, View v, int position, long id) {

                    lv.getItemAtPosition(position);

                }
            });



    }catch (Exception e) {
        Log.e("log_tag", "Error converting result " + e.toString());
        }
}
}

Заранее спасибо

Ответы [ 5 ]

7 голосов
/ 28 ноября 2011
 final ListView lv = getListView();
            lv.setOnItemClickListener(new OnItemClickListener(){
                public void onItemClick(AdapterView<?> parent, View v, int position, long id) {

                   Map<String, String> map = mylist.get(position);
                   String link = map.get("Link");


                }
            });
1 голос
/ 28 ноября 2011

Лучший способ - обернуть вашу информацию в Object, загрузить данные из Интернета и создать Object и добавить ее к любому ArrayList.

Например:

Вы создадите класс Java Object. скажем: VideoInfo

public class VideoInfo
{
     String title, content, link, thumb;
     // define there setter getter
     // also a constructor with these params 
     public VideoInfo(String title,String content,String link,String thumb)
     {
          //set Values accordingly
     }
}

сделать уровень класса ArrayList

ArrayList<VideoInfo> myList = new ArrayList<VideoInfo>();

и когда вы получаете данные с сервера, анализируете и сохраняете их следующим образом:

myList.add(new VideoInfo(txtTitle, txtContent, txtLink, txtThumb));

Вам понадобится настроить Adapter (например, переопределить getView()) , чтобы установить данные из вашего пользовательского объекта (VideoInfo).

и затем в вашем ListActivity в OnItemClickListener вы получите желаемый объект следующим образом:

public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
    // you have class level ArrayList myList.
    myList.get(position).getLink();  //getLink() will be the getter of you field link in VideoInfo
}
0 голосов
/ 08 января 2013

Например, вы можете сделать что-то похожее на это:

for(int i = 0; i < ((ListView)lv).getItemCount(); i++){
    Map<String, String> currentView =  (Map<String, String>) ((ListView)lv).getItemAtPosition(i);
    String cVId = currentView.get("id");
}
0 голосов
/ 28 ноября 2011
lv.setOnItemClickListener(new OnItemClickListener(){

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

            HashMap<String, String> selectedHashMapObject = (HashMap<String, String>)lv.getItemAtPosition(position);

            String selectedLink = selectedHashMapObject.get("Link"); 
}
0 голосов
/ 28 ноября 2011

Я думаю, вы можете использовать это http://developer.android.com/reference/android/widget/CursorAdapter.html#getItem(int).

Cursor cursor = (Cursor) simple.getItem(position);

// получить данные из курсора

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...