OnClickListener для строк в Android?

#java #android #onclick

#java #Android #onclick

Вопрос:

Я искал в Интернете способ сделать это, но, возможно, я ищу не то, что нужно. У меня есть ListView, который, по сути, служит прямой трансляцией. В каждом объекте feedEntry этого ListView (ArrayList) приложение отображает слова, разделенные пробелом, в виде одной строки. Вот пример того, что будет отображать один элемент ListView (один feedEntry):

 Sahara Africa Ohio Libya
  

Я хотел бы иметь это так, чтобы пользователь мог нажимать на каждое слово и отображалось всплывающее окно (которое, в свою очередь, будет содержать отдельные ссылки в нем). Я понимаю, как настроить это всплывающее окно, но как мне прикрепить OnClickListener для каждого из этих слов? Я не уверен, какой код был бы вам полезен, но вот мое основное действие в ленте (Feed.java ):

 public class Feed extends Activity {
ListView liveFeed;
static ArrayAdapter<feedEntry> aa;

static ArrayList<feedEntry> entries = new ArrayList<feedEntry>();

/** Called when the activity is first created. */
@Override
 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.feed);

    liveFeed = (ListView)this.findViewById(R.id.liveFeed);

    int layoutID = android.R.layout.simple_list_item_1;
    aa = new ArrayAdapter<feedEntry>(this, layoutID, entries);
    liveFeed.setAdapter(aa);


    final Handler handler = new Handler();
    Timer time = new Timer();
    TimerTask refresh = new TimerTask(){
        public void run(){
            handler.post(new Runnable(){
                public void run(){
                    feedEntry.refreshFeed();
                }
            });
        }
    };
    time.scheduleAtFixedRate(refresh, 0, 5000);
  }
}
  

Вот мой класс feedEntry (для каждого элемента feedEntry в ListView):

 public class feedEntry {
private static int line=1;//use later
private String keywords;
private JSONArray data;

public feedEntry(JSONArray obj){
    data = obj;
    keywords="";
    try{
        for (int i=0;i<data.length();i  ){
            JSONArray tmp = (JSONArray)data.get(i);
            keywords  = tmp.get(0) " ";
        }

    } catch(JSONException e){
        e.printStackTrace();
    }
} 

public String toString(){
    return keywords;
}

public static void addNewEntry(feedEntry entry){
    Feed.entries.add(0, entry);
    Feed.aa.notifyDataSetChanged();//notify the array adapter that data has changed
}

//connects to and parses the feed
static public void refreshFeed(){
    try{
        String url = "http://192.17.254.11:8080/getdata?nextline=" line;
        line  ;
        HttpClient httpclient = new DefaultHttpClient();
        HttpGet httpget = new HttpGet(url);
        HttpResponse response;
        response = httpclient.execute(httpget);
        HttpEntity entity = response.getEntity();
        InputStream in = entity.getContent();

        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
        StringBuilder sb = new StringBuilder();

        String input = null;
        try {
            while ((input = reader.readLine()) != null) {
            sb.append(input   "n");
            }
        } catch (IOException e) {
                e.printStackTrace();
        } finally {
            try {
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
         }
        String enter = sb.toString();
        if (!enter.equals("None")){
            JSONArray jArray = new JSONArray(enter);
            feedEntry add = new feedEntry(jArray);
            addNewEntry(add);
        }

        in.close();

    } catch(MalformedURLException e){
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (JSONException e){
        e.printStackTrace();
    }
}
}
  

Любая помощь приветствуется. Опять же, я очень сожалею обо всем коде. Я просто хотел выдать как можно больше того, что может иметь отношение к делу. На данный момент я уверен, что мне нужно будет включить эти onClickListeners в мой Feed.java , поскольку это основное действие, но я не уверен, как поместить их в отдельные слова внутри строки.

Ответ №1:

Во-первых, я скептически отношусь к тому, что ваш UX будет очень хорошим. Телефоны крошечные. Пользователям будет очень сложно точно нажимать на одно произведение по сравнению с другим с большим количеством слов в строке.

Во-вторых, я скептически отношусь к тому, что ListView является правильным ответом. GridView Было бы проще, если вам нужны строки и столбцы слов.

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

Комментарии:

1. Спасибо CommonsWare. На самом деле я также переосмыслил то, как я разрабатываю свое приложение. Это именно тот ответ, который я искал. Ничего специфичного для кода, а просто общее направление того, как это сделать.