#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. На самом деле я также переосмыслил то, как я разрабатываю свое приложение. Это именно тот ответ, который я искал. Ничего специфичного для кода, а просто общее направление того, как это сделать.