java - 如何单击列表视图项?
问题描述
我已成功获取 json 数据并制作了列表视图。但我无法单击列表项,也无法将额外内容发送到其他活动。这是我的适配器。
我想将地址字符串发送到新活动。(我是android dev的新手)
这是我的工作。我做错了什么?列表显示完美,但没有点击。:(
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);
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");
String 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) {
Intent intent = new Intent(context, video_view.class);
intent.putExtra("address", address);
startActivity(intent);
lv.setOnItemClickListener(mMessageClickedHandler);
}
};
}
}
解决方案
你忘了设置监听器。
@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();
}
推荐阅读
- kotlin - 如果在 Kotlin 中泛型是 Int,泛型如何工作?
- tensorflow - Tensorflow 2 TypeError:预期的 int32 传递给 op 'Greater' 的参数'y',得到了 'float' 类型的 1e-12
- tensorflow - 输入如何转换为 NN 的输入单元
- sublimetext3 - 崇高文本上鼠标右键单击功能的键盘快捷键是什么
- python - 在 ray.tune 中保存剧集奖励
- python - AWS Lambda 不断返回“\”来自 Lambda 的你好!\”
- c++ - 返回完整的大写/小写转换字符串
- css - Bootstrap 4中li元素之间的内联管道分隔符
- c++ - 编写 C++ 程序“双倍的分数”
- visual-studio-code - 从命令行在 WSL 或 EMR 上安装 vscode 扩展