我下面有这个课程。
package com.example.metermanager;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import meter.manager.helper.DatabaseHelperClass;
import meters.model.MeterReading;
import meters.model.VMeterReadings;
import meters.model.VReadings;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
public class EditReadingsAdapter extends BaseAdapter {
@SuppressWarnings("unused")
private Context context;
DatabaseHelperClass db;
private static String DB_NAME="meterapp.sqlite";
private List<VReadings> readings =new ArrayList<VReadings>();
DecimalFormat df = new DecimalFormat("#,###,###,###");
SimpleDateFormat fm =new SimpleDateFormat("dd-MM-yyyy",Locale.UK);
public EditReadingsAdapter( Context context1, String myDate) {
this.context=context1;
DatabaseHelperClass db= new DatabaseHelperClass( context1,DB_NAME);
readings=db.GetMeterReadings(myDate);
db.close();
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return readings.size();
}
@Override
public Object getItem(int index) {
// TODO Auto-generated method stub
return getItem(index);
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0;
}
@Override
public View getView(int arg0, View view, ViewGroup parent) {
try{
if (view ==null){
LayoutInflater inflater=
LayoutInflater.from(parent.getContext());
view =inflater.inflate(R.layout.edit_reading_details,parent,false);
}
VReadings reading =readings.get(arg0);
TextView idTextView =(TextView)
view.findViewById(R.id.textView6);
idTextView.setText( Integer.toString(reading.get_id()));
TextView readingdateTextView =(TextView)
view.findViewById(R.id.textView7);
readingdateTextView.setText(fm.format(((reading.getReadingDate()))));
TextView readingTextView =(TextView)
view.findViewById(R.id.textView8);
readingTextView.setText(df.format((reading.getReading())));
TextView Rate =(TextView)
view.findViewById(R.id.textView9);
Rate.setText(df.format(reading.getRate()));
TextView meterTextView =(TextView)
view.findViewById(R.id.textView10);
meterTextView.setText(reading.getMeter_number().toString());
}catch(Exception e)
{
Log.e("Error loading data in listbox",e.toString());
}
return view;
}
}
我使用该类将数据加载到listview小部件中。
public void Search(View v)
{
try{
Date search=fm.parse(txtviewreadingDate.getText().toString());
String searchDate=fm.format(search);
adapter = new EditReadingsAdapter(this ,searchDate);
ListView listview =(ListView)findViewById(R.id.lstSearchReadings);
listview.setAdapter(adapter);
listview.setOnItemClickListener(this);
} catch(Exception e)
{
Log.e("Search Error", e.toString());
}
}
On我在listview上设置了onclickListener事件。
我希望能够在列表视图中获取当前选定的对象,并在自定义对话框中使用它。
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
Context context = this.getApplicationContext();
// custom dialog
try{
final Dialog dialog = new Dialog(context);
dialog.setContentView(R.layout.edit_reading_dialog);
dialog.setTitle("Edit Meter Readings");
VReadings r= (VReadings)adapter.getItem(position);
当我点击列表视图时,我收到强制关闭错误。
这是错误的Logcat。
02-10 19:15:28.906: I/dalvikvm(5060): threadid=1: stack overflow on call to Lcom/example/metermanager/EditReadingsAdapter;.getItem:LI
02-10 19:15:28.906: I/dalvikvm(5060): method requires 12+20+8=40 bytes, fp is 0x4428a320 (32 left)
02-10 19:15:28.916: I/dalvikvm(5060): expanding stack end (0x4428a300 to 0x4428a000)
02-10 19:15:28.916: I/dalvikvm(5060): Shrank stack (to 0x4428a300, curFrame is 0x4428cebc)
02-10 19:15:28.916: D/AndroidRuntime(5060): Shutting down VM
02-10 19:15:28.916: W/dalvikvm(5060): threadid=1: thread exiting with uncaught exception (group=0x40015560)
02-10 19:15:29.227: E/AndroidRuntime(5060): FATAL EXCEPTION: main
02-10 19:15:29.227: E/AndroidRuntime(5060): java.lang.StackOverflowError
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.getItem(EditReadingsAdapter.java:47)
02-10 19:15:29.227: E/AndroidRuntime(5060): at com.example.metermanager.EditReadingsAdapter.get
02-10 19:15:29.657: D/dalvikvm(5060): GC_CONCURRENT freed 1491K, 58% free 3062K/7175K, external 4957K/5214K, paused 8ms+8ms
02-10 19:15:35.306: I/Process(5060): Sending signal. PID: 5060 SIG: 9
看起来下面的一行是麻烦的问题。
VReadings r= (VReadings)adapter.getItem(position);
为什么?
罗纳德
答案 0 :(得分:2)
因为函数getItem
会调用自身。你最终会有无限的呼叫循环。
public Object getItem(int index) {
// TODO Auto-generated method stub
return getItem(index);
}
当引擎盖下的函数的参数通过堆栈时,最终会出现堆栈溢出。
答案 1 :(得分:0)
@Override
public Object getItem(int index) {
// TODO Auto-generated method stub
return readings.get(index);
}