Я успешно получил данные json и создал представление списка. Теперь я хочу отправить несколько дополнений, но перед отправкой дополнений я попытался показать тост для тестирования. Но tost всегда возвращает мне последний идентификатор, указанный как имя. :(
(Я новичок в Android-разработчике)
Вот моя работа. Что я сделал не так? Tost отлично показывает позицию, но показывает фамилию, указанную как константу. Например, если я нажимаю на первое поле, оно показывает мне ПОСЛЕДНЕЕ поле, если я нажимаю на среднее поле, оно также показывает мне последнее поле.
private String TAG = MainActivity.class.getSimpleName();
private ListView lv;
private ListView listView;
ArrayList<HashMap<String, String>> channelList;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.live_stream);
channelList = new ArrayList<>();
lv = (ListView) findViewById(R.id.list);
lv.setOnItemClickListener(mMessageClickedHandler);
new GetChannel().execute();
}
private class GetChannel extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
Toast.makeText(LiveStreaming.this, "Streaming list is loading", Toast.LENGTH_LONG).show();
}
@Override
protected Void doInBackground(Void... arg0) {
HttpHandler sh = new HttpHandler();
// Making a request to url and getting response
String url = "http://ubpower.net/cricktv/tv.json";
String jsonStr = sh.makeServiceCall(url);
Log.e(TAG, "Response from url: " + jsonStr);
if (jsonStr != null) {
try {
JSONObject jsonObj = new JSONObject(jsonStr);
// Getting JSON Array node
JSONArray channel = jsonObj.getJSONArray("channel");
for (int i = 0; i < channel.length(); i++) {
JSONObject c = channel.getJSONObject(i);
String id = c.getString("id");
name = c.getString("name");
String quality = c.getString("quality");
address = c.getString("address");
// tmp hash map for single contact
HashMap<String, String> channel_hash = new HashMap<>();
// adding each child node to HashMap key => value
channel_hash.put("id", id);
channel_hash.put("name", name);
channel_hash.put("quality", quality);
channel_hash.put("address", address);
// adding contact to contact list
channelList.add(channel_hash);
}
} catch (final JSONException e) {
Log.e(TAG, "Json parsing error: " + e.getMessage());
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(),
"Json parsing error: " + e.getMessage(),
Toast.LENGTH_LONG).show();
}
});
}
} else {
Log.e(TAG, "Couldn't get json from server.");
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(),
"Couldn't get json from server. Check LogCat for possible errors!",
Toast.LENGTH_LONG).show();
}
});
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
ListAdapter adapter = new SimpleAdapter(LiveStreaming.this, channelList,
R.layout.stream_list, new String[]{ "name","quality","address"},
new int[]{R.id.channel_title, R.id.channel_quality, R.id.channel_address});
lv.setAdapter(adapter);
}
}
// ******************** Адаптер для щелчка по элементу списка и передачи данных
public AdapterView.OnItemClickListener mMessageClickedHandler = new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView parent, View v, int position, long id) {
Toast.makeText(LiveStreaming.this, "click item" + position + name , Toast.LENGTH_SHORT).show();
Intent intent = new Intent(LiveStreaming.this, video_view.class);;
// intent.putExtra("address", address);
startActivity(intent);
}
};
}
Где onItemClickListener?
добавлен. Я отредактировал и добавил все свои работы. Вы можете помочь? Пожалуйста




Чтобы получать тапы, вам нужно добавить в адаптер прослушиватель кликов по элементам. Вот один из способов сделать это:
private OnItemClickListener mMessageClickedHandler = new OnItemClickListener() {
public void onItemClick(AdapterView parent, View v, int position, long id) {
// Do something in response to the click
}
};
listView.setOnItemClickListener(mMessageClickedHandler);
Чтобы получить данные в новом действии, проще всего добавить эти поля данных в намерение, используемое для создания нового действия.
Intent intent = new Intent(this, NewActivity.class);
intent.putExtra("SomeKey", value );
startActivity(intent);
Потрясающе решено. Но Tost показывает позицию отлично, но показывает фамилию, указанную как константу. Например, если я нажимаю на первое поле, оно показывает мне ПОСЛЕДНЕЕ поле, если я нажимаю на среднее поле, оно также показывает мне последнее поле. Зачем? :(
Я рад, что это предложение решило ее. :) Что касается вашего второго вопроса, я не понимаю, о чем вы. Используйте позицию или идентификатор для поиска нужных данных. Первый параметр putExtra - это имя аргумента, второй - значение.
//This may help
//Attach and Send date to another activity:
Bundle bundle = new Bundle();
bundle.putString("Name",Object); //This is for a String
i.setClass(CurrentClass.this, Class.class);
i.putExtras(bundle);
startActivity(i);
//Receive Data on second Activity:
Bundle bundle = null;
bundle = this.getIntent().getExtras();
String myString = bundle.getString("Name");//this is for String
Решено. Спасибо. Но Tost показывает позицию отлично, но показывает фамилию, указанную как константу. Например, если я нажимаю на первое поле, оно показывает мне ПОСЛЕДНЕЕ поле, если я нажимаю на среднее поле, оно также показывает мне последнее поле.
But I'm unable to click on the list item and can't send extras to another activity. here is my adapter.что пробовали? Я не вижу ваших попыток в вашем коде.