Android 如何在listview上创建可单击的项目,我应该选择什么适配器?
以下是脚本:Android 如何在listview上创建可单击的项目,我应该选择什么适配器?,android,listview,Android,Listview,以下是脚本: public class LecturAct extends ListActivity { private static final String AR_ID = "id_lec"; private static final String AR_LC = "lec_nm"; private static final String AR_CLS = "class"; private static final String EXTRA_DATA = "
public class LecturAct extends ListActivity {
private static final String AR_ID = "id_lec";
private static final String AR_LC = "lec_nm";
private static final String AR_CLS = "class";
private static final String EXTRA_DATA = "idr";
JSONArray lec = null;
ArrayList<HashMap<String, String>> lec_list = new ArrayList<HashMap<String, String>>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_lec);
Intent quiz = getIntent();
String id = quiz.getStringExtra(EXTRA_DATA);
String link_url = "http://xxxx/xxxx.php?id="+id;
JSONParser jParser = new JSONParser();
JSONObject json = jParser.gtJson(link_url);
try {
lec = json.getJSONArray("lec");
for(int i = 0; i < lec.length(); i++){
JSONObject ar =lec.getJSONObject(i);
String lectid = ar.getString(AR_ID);
String lecname = ar.getString(AR_LC);
String class = ar.getString(AR_CLS);
HashMap<String, String> map = new HashMap<String, String>();
map.put(AR_ID, lectid);
map.put(AR_LC, lecname);
map.put(AR_CLS, class);
lec_list.add(map);
}
} catch (JSONException e) {
e.printStackTrace();
}
this.adapter_listview();
}
公共课堂讲师法案扩展了ListActivity{
私有静态最终字符串AR\u ID=“ID\u lec”;
专用静态最终字符串AR_LC=“lec_nm”;
私有静态最终字符串AR_CLS=“class”;
专用静态最终字符串EXTRA_DATA=“idr”;
JSONArray-lec=null;
ArrayList lec_list=新建ArrayList();
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
requestWindowFeature(窗口。功能\u无\u标题);
setContentView(R.layout.activity_-lec);
意图测验=getIntent();
字符串id=quick.getStringExtra(额外数据);
字符串链接\u url=”http://xxxx/xxxx.php?id=“+id;
JSONParser jParser=新的JSONParser();
JSONObject json=jParser.gtJson(链接url);
试一试{
lec=json.getJSONArray(“lec”);
对于(int i=0;i
我尝试在我的listview上创建一个可单击的项目,以下是脚本:
public void adapter_listview() {
ListAdapter adapter = new SimpleAdapter(this, lec_list,
R.layout.list_item,
new String[] { AR_ID, AR_CLS, AR_LC}, new int[] {
R.id.title, R.id.content, R.id.code});
setListAdapter(adapter);
ListView lv = getListView();
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
String cd = ((TextView) view.findViewById(R.id.code)).getText().toString();
Intent in = new Intent(LecturAct.this, Quis.class);
in.putExtra(AR_ID, cd);
startActivity(in);
}
});
}
public void适配器_listview(){
ListAdapter=新的SimpleAdapter(此,lec_列表,
R.layout.list_项目,
新字符串[]{AR_ID,AR_CLS,AR_LC},新int[]{
R.id.title,R.id.content,R.id.code});
setListAdapter(适配器);
ListView lv=getListView();
lv.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
字符串cd=((TextView)view.findviewbyd(R.id.code)).getText().toString();
意向in=新意向(讲师行为、本、奎斯类);
in.putExtra(AR_ID,cd);
星触觉(in);
}
});
}
但是当我点击一个项目时,它会一直把我带到错误的方向,总是把我带到最后一个项目
然后,当我单击生物学或我选择的任何内容时,它总是会将我带到“数学”页面。那么我该怎么办?我是否使用了错误的适配器?请帮助我,给我正确的解决方案:(只需覆盖
受保护的void onListItemClick(ListView l,View v,int position,long id)
例如讲师法案中的
protected void onListItemClick (ListView l, View v, int position, long id) {
String cd = getListAdapter().getItem(position);
Intent in = new Intent(LecturAct.this, Quis.class);
in.putExtra(AR_ID, cd);
startActivity(in);
}
我的例子和你的一样。只需更改对象类型。或字符串
catalogListView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
对象obj=(对象)((字符串)parent.getAdapter().getItem(位置));
字符串ss=obj.toString();
Intent i=新的Intent(getActivity(),PdfReader.class);
i、 putExtra(“catalogPdfUrl”),“”+ss;
getActivity().startActivity(i);
}
});
此答案与阿明的答案类似,但差别不大。示例代码:
@Override
protected void onListItemClick (ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
String mlecture p = (String) l.getItemAtPosition(position);
...
in.putExtra(AR_ID, lecture);
startActivity(in);
}
注:
- 获取列表视图参数(l),并获取要开始的行/项位置
- 无法使用view.findViewById方法,因为ListView(l)已具有UI对象
- 由于使用了ListActivity,请使用override onListItemClick
new String[] { AR_ID, AR_CLS, AR_LC},
new int[] { R.id.title, R.id.content, R.id.code});
致:
我切换了R.id.code。我认为这与in.putExtra(AR\u id,cd)兼容。因为我不知道quick.class,所以没有好办法确定。`String cd=getListAdapter().getItem(position);'我该怎么做?我已经尝试过更改它,但我不明白:(这行
PDF=(PDF)parent.getAdapter().getItem(position);
我不知道如何更改它:(PDF是myListItem自定义对象。您的对象是String。String是extend(java lang.Object)相同的版本。我试图更改它:String cd=(String)parent.getAdapter().getItem(position)
但是它仍然会自动选择列表上的最后一项它应该是完整的,我要求您使用@the Original Android answersQuiz.class中提供的工作示例只需检索额外的数据并将其设置为textView我不能使用onListItemClick,红色提示不断告诉我将其更改为OnItemClick我很高兴它现在可以工作您。(我应该早一点回答)实际上,当使用ListActivity时,onItemClick不可用。当您使用Activity时,onItemClick可用。如果是这样,则使用“lv.setOnItemClickListener”。这种框架设计很难将父类从Activity更改为ListActivity。
new String[] { AR_ID, AR_CLS, AR_LC},
new int[] { R.id.title, R.id.content, R.id.code});
new String[] { AR_ID, AR_CLS, AR_LC},
new int[] { R.id.code, R.id.title, R.id.content });