onlistitemclick 无法触发 且报错stackoverflow

Android 码拜 6年前 (2015-05-10) 460次浏览 0个评论
 

先附上源码:
package com.ui.learningassistant;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.TimeZone;

import android.app.ListActivity;
import android.app.DownloadManager.Query;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;

import com.ui.learningassistant.db.ScheduleDB;

public class Schedule extends ListActivity{

private TextView tvDate;
private Button btnMonday, btnTuesDay, btnWednesDay, btnThursday, btnFriday;
private Button btnManageCourse;
private ScheduleAdapter adapter;

private static ScheduleDB db;
private static SQLiteDatabase dbRead;

public static final String EXTRA_SCHEDULE_ID = “scheduleId”;
public static final String EXTRA_SCHEDULE_COURSE = “scheduleCourse”;

private OnClickListener btnClickHandler=new OnClickListener() {

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnMonday:
queryScheduleByDay(0);
// notifyDataSetChanged();
break;
case R.id.btnTuesday:
queryScheduleByDay(8);
break;
case R.id.btnWednesday:
queryScheduleByDay(16);
break;
case R.id.btnThursday:
queryScheduleByDay(24);
break;
case R.id.btnFriday:
queryScheduleByDay(32);
break;
case R.id.btnManageCourse:
Intent i = new Intent(Schedule.this, AtyCourse.class);
startActivity(i);
break;

default:
break;
}

}
};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.aty_schedule);

tvDate = (TextView) findViewById(R.id.tvDate);
tvDate.setText(“”+StringData());

findViewById(R.id.btnMonday).setOnClickListener(btnClickHandler);
findViewById(R.id.btnTuesday).setOnClickListener(btnClickHandler);
findViewById(R.id.btnWednesday).setOnClickListener(btnClickHandler);
findViewById(R.id.btnThursday).setOnClickListener(btnClickHandler);
findViewById(R.id.btnFriday).setOnClickListener(btnClickHandler);
findViewById(R.id.btnManageCourse).setOnClickListener(btnClickHandler);

}

//—————-显示日期 星期——————————
public static String StringData(){  
String mYear;  
String mMonth;  
String mDay;  
String mWay;  
final Calendar c = Calendar.getInstance();  
c.setTimeZone(TimeZone.getTimeZone(“GMT+8:00”));  
mYear = String.valueOf(c.get(Calendar.YEAR)); // 获取当前年份  
mMonth = String.valueOf(c.get(Calendar.MONTH) + 1);// 获取当前月份  
mDay = String.valueOf(c.get(Calendar.DAY_OF_MONTH));// 获取当前月份的日期号码  
mWay = String.valueOf(c.get(Calendar.DAY_OF_WEEK));  
if(“1″.equals(mWay)){  
mWay =”休息”;  
}else if(“2″.equals(mWay)){  
mWay =”一”;  
}else if(“3″.equals(mWay)){  
mWay =”二”;  
}else if(“4″.equals(mWay)){  
mWay =”三”;  
}else if(“5″.equals(mWay)){  
mWay =”四”;  
}else if(“6″.equals(mWay)){  
mWay =”五”;  
}else if(“7″.equals(mWay)){  
mWay =”休息”;  
}  
return mYear + “年” + mMonth + “月” + mDay+”日”+”/星期”+mWay;  
}  

@Override
protected void onDestroy() {
dbRead.close();
super.onDestroy();
}

public void queryScheduleByDay(int a){

adapter = new ScheduleAdapter(this);
setListAdapter(adapter);
db = new ScheduleDB(this);
dbRead = db.getReadableDatabase();
Cursor c = dbRead.rawQuery(“SELECT * FROM schedule Where _id>=? AND _id<=?”, new String[]{“”+a+””,””+(a+7)+””});
while(c.moveToNext()){
adapter.add(new ScheduleListCellData(c.getString(c.getColumnIndex(ScheduleDB.COLUMN_NAME_SCHEDULE_NAME)), c.getInt(c.getColumnIndex(ScheduleDB.COLUMN_NAME_ID))));
}

};

//   点击列表课程进行设置
protected void onListItemClick(ListView l, View v, int position, long id) {
Log.i(“TEST”, “点击列表触发spinner”);
ScheduleListCellData data = adapter.getItem(position);
Log.i(“TEST”, “获取position”+position);
Intent i = new Intent(this, AtyEditSchedule.class);
i.putExtra(Schedule.EXTRA_SCHEDULE_ID, data.id);
Log.i(“TEST”, “插入数据”+data.id);
i.putExtra(Schedule.EXTRA_SCHEDULE_COURSE, data.course);
Log.i(“TEST”, “插入数据”+data.course);
startActivity(i);
Log.i(“TEST”, “开始activity”);

super.onListItemClick(l, v, position, id);
}

static class ScheduleAdapter extends BaseAdapter{

private Context context;
private List<ScheduleListCellData> list = new ArrayList<Schedule.ScheduleListCellData>();

public ScheduleAdapter(Context context){
this.context = context;
}

public void add(ScheduleListCellData data){
list.add(data);
}

@Override
public int getCount() {
Log.i(“TEST”,”getCount:”+list.size());
return list.size();
}

@Override
public ScheduleListCellData getItem(int position) {
Log.i(“TEST”, “getItem():”+getItem(position).toString());
return list.get(position);
}

@Override
public long getItemId(int position) {
Log.i(“TEST”, “getIemId()”+getItemId(position));
return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView==null) {
convertView = LayoutInflater.from(context).inflate(R.layout.schedule_list_cell, null);
}

TextView tvNo = (TextView) convertView.findViewById(R.id.tvNo);
TextView tvCourse = (TextView) convertView.findViewById(R.id.tvCourse);
ScheduleListCellData data = list.get(position);
tvCourse.setText(data.course);
tvNo.setText(“”+(position+1));
return convertView;
}

}

static class ScheduleListCellData{

String course = “”;
int id = -1;

public ScheduleListCellData(String course, int id){
this.course = course;
this.id = id;
}

}

}
通过点击按钮来显示每天的课程 用的是listactivity 但是无法触发onlistitemclick 只要点击列表项就会报错
错误是stackoverflow 然后是无限出现getItemid的错误
上网查是说用Linearlayout 嵌套太多 我用了3层嵌套 一是主布局 二是界面里的按钮布局  三是List里面的内容布局 
求大神指点下

onlistitemclick 无法触发 且报错stackoverflow
这是报错的内容
ListView listview = getListView();  
        /** 
         * The setTextFilterEnabled(boolean) method turns on text filtering for 
         * the ListView, so that when the user begins typing, the list will be 
         * filtered.不太明白什么意思? 
         */  
        listview.setTextFilterEnabled(true);  
        // 设置ListView的监听事件  
        listview.setOnItemClickListener(new OnItemClickListener() {  
            public void onItemClick(AdapterView<?> parent, View view,  
                    int position, long id) {  
                String s = ((TextView) view).getText().toString();  
                Toast.makeText(getApplicationContext(), s, Toast.LENGTH_SHORT)  
                        .show();  
            }  
        });  
    }   
请使用这种listview的item点击方法。。。
引用 2 楼 u013377714 的回复:

ListView listview = getListView();  
        /** 
         * The setTextFilterEnabled(boolean) method turns on text filtering for 
         * the ListView, so that when the user begins typing, the list will be 
         * filtered.不太明白什么意思? 
         */  
        listview.setTextFilterEnabled(true);  
        // 设置ListView的监听事件  
        listview.setOnItemClickListener(new OnItemClickListener() {  
            public void onItemClick(AdapterView<?> parent, View view,  
                    int position, long id) {  
                String s = ((TextView) view).getText().toString();  
                Toast.makeText(getApplicationContext(), s, Toast.LENGTH_SHORT)  
                        .show();  
            }  
        });  
    }   
请使用这种listview的item点击方法。。。

这段代码应该写在哪里?

你放在哪里都行,放在oncreate里面就行。。删掉你的onlistitemclick方法,不知道这有什么用。
引用 4 楼 u013377714 的回复:

你放在哪里都行,放在oncreate里面就行。。删掉你的onlistitemclick方法,不知道这有什么用。

 我放在ONCREATE里面 先写了个空的 运行了一下 点击列表还是不能触发这个click

引用 5 楼 tablecat123 的回复:
Quote: 引用 4 楼 u013377714 的回复:

你放在哪里都行,放在oncreate里面就行。。删掉你的onlistitemclick方法,不知道这有什么用。

 我放在ONCREATE里面 先写了个空的 运行了一下 点击列表还是不能触发这个click

你是说点了,完全没反应?

引用 6 楼 u013377714 的回复:
Quote: 引用 5 楼 tablecat123 的回复:
Quote: 引用 4 楼 u013377714 的回复:

你放在哪里都行,放在oncreate里面就行。。删掉你的onlistitemclick方法,不知道这有什么用。

 我放在ONCREATE里面 先写了个空的 运行了一下 点击列表还是不能触发这个click

你是说点了,完全没反应?

对的  而且直接报错 错都一样。。。

这是栈溢出,很可能是

引用 7 楼 tablecat123 的回复:
Quote: 引用 6 楼 u013377714 的回复:
Quote: 引用 5 楼 tablecat123 的回复:
Quote: 引用 4 楼 u013377714 的回复:

你放在哪里都行,放在oncreate里面就行。。删掉你的onlistitemclick方法,不知道这有什么用。

 我放在ONCREATE里面 先写了个空的 运行了一下 点击列表还是不能触发这个click

你是说点了,完全没反应?

对的  而且直接报错 错都一样。。。

你再描述一下,列表在没有点的时候上下拉的时候会不会报错。。

100分
public void add(ScheduleListCellData data){
list.add(data);
}里面加句notifyDataSetChanged();
引用 8 楼 u013377714 的回复:

这是栈溢出,很可能是

Quote: 引用 7 楼 tablecat123 的回复:
Quote: 引用 6 楼 u013377714 的回复:
Quote: 引用 5 楼 tablecat123 的回复:
Quote: 引用 4 楼 u013377714 的回复:

你放在哪里都行,放在oncreate里面就行。。删掉你的onlistitemclick方法,不知道这有什么用。

 我放在ONCREATE里面 先写了个空的 运行了一下 点击列表还是不能触发这个click

你是说点了,完全没反应?

对的  而且直接报错 错都一样。。。

你再描述一下,列表在没有点的时候上下拉的时候会不会报错。。

已经换方法了 不用listactivity 直接用list  onitemclick 实现了


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明onlistitemclick 无法触发 且报错stackoverflow
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!