2013-01-15 39 views
0

我已经创建了Android应用程序来使用ArrayList中的BaseAdapter检索Listview,但在Listview中没有显示任何东西。我的应用程序的描述是我想使用BaseAdapter检索listview。当我的应用程序在模拟器上运行时,只有在模拟器上的菜单按钮上单击时,屏幕上才会显示任何内容。单击添加按钮后显示在屏幕上的按钮。添加启动该活动中的新活动,我创建了两个editText。提交后,返回上一级活动并显示列表视图。如何使用BaseAdapter检索listview?

可以请人帮我找出这个错误

以下是Adapter类

package com.oj2.exlistview; 

import java.util.ArrayList; 

import android.os.Bundle; 
import android.app.Activity; 
import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.View; 
import android.view.ViewGroup; 
import android.webkit.WebView.FindListener; 
import android.widget.BaseAdapter; 
import android.widget.TextView; 

public class TimeTrackAdapter extends BaseAdapter { 

    ArrayList<TimeRecord> times = new ArrayList<TimeRecord>(); 
    public Context cntxt; 
    public TimeTrackAdapter(Context cnt,ArrayList<TimeRecord> list2) { 
     super(); 
     cntxt = cnt; 
     times = list2; 
    } 

    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return new TimeTracker().getList1().size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     return getItem(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     if (convertView == null){ 
      System.out.println("in getView"); 
      LayoutInflater inflater = LayoutInflater.from(parent.getContext()); 
      convertView = inflater.inflate(R.layout.time_list_item, parent,false); 
      TimeRecord time = times.get(position); 

      TextView timeTextView = (TextView) convertView.findViewById(R.id.timeView); 
      timeTextView.setText(time.getTimes()); 


      TextView noteTextView = (TextView) convertView.findViewById(R.id.noteView); 
      noteTextView.setText(time.getNotes()); 

     } 
     return convertView; 
    } 

} 

以下是Activity类

package com.oj2.exlistview; 

    import java.util.ArrayList; 

    import android.app.Activity; 
    import android.content.Intent; 
    import android.os.Bundle; 
    import android.view.Menu; 
    import android.view.MenuInflater; 
    import android.view.MenuItem; 
    import android.widget.ListView; 

    public class TimeTracker extends Activity{ 
     TimeTrackAdapter timeTrackAdapter; 
     ListView listView; 
     TimeRecord timerecord; 
     public ArrayList<TimeRecord> list1 = new ArrayList<TimeRecord>(); 

     public static final int TIME_ENTRY_REQUEST_CODE = 1; 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      // TODO Auto-generated method stub 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_list); 
      System.out.println("in onCreate()"); 

     } 

     public ArrayList<TimeRecord> getList1() { 
      return list1; 
     } 

     public void setList1(ArrayList<TimeRecord> list1) { 
      this.list1 = list1; 
     } 

     @Override 
     public boolean onCreateOptionsMenu(Menu menu) { 
      // TODO Auto-generated method stub 
      super.onCreateOptionsMenu(menu); 
      System.out.println("in onCreateOptionsMenu"); 
      MenuInflater mI = getMenuInflater(); 

      mI.inflate(R.menu.time_list_menu,menu); 
      return true; 
     } 
     @Override 
     public boolean onMenuItemSelected(int featureId, MenuItem item) { 
      // TODO Auto-generated method stub 
      System.out.println("in onMenuItemSelected"); 
      if (item.getItemId()==R.id.add_time_menu_item) { 
       Intent intent = new Intent(this, AddTimeActivity.class); 
       startActivityForResult(intent, TIME_ENTRY_REQUEST_CODE); 

       return true; 
      } 
      return super.onOptionsItemSelected(item); 
     } 
     @Override 
     protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
      // TODO Auto-generated method stub 
      super.onActivityResult(requestCode, resultCode, data); 
      System.out.println("in onActivityResult"); 
      if (requestCode==TIME_ENTRY_REQUEST_CODE) { 
       if (resultCode==RESULT_OK) { 
        String Time = data.getStringExtra("time"); 
        String Note = data.getStringExtra("note"); 

        list1.add(new TimeRecord(Time, Note)); 

        timeTrackAdapter = new TimeTrackAdapter(this,list1); 
        listView = (ListView) findViewById(R.id.timeListView); 
        listView.setAdapter(timeTrackAdapter); 
        listView.getAdapter(); 
        /* timeTrackAdapter.addTimeRecord(new TimeRecord(Time, Note));*/ 
        timeTrackAdapter.notifyDataSetChanged(); 
       } 
      } 
     } 

    } 

以下是AddTimeActivity

package com.oj2.exlistview; 

    import android.app.Activity; 
    import android.content.Intent; 
    import android.os.Bundle; 
    import android.view.Menu; 
    import android.view.View; 
    import android.widget.EditText; 

    public class AddTimeActivity extends Activity{ 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      // TODO Auto-generated method stub 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.add_time); 
     } 

     public void onCancle(View view) { 
      finish(); 
     } 
     public void onSave(View view) { 
      Intent intent = getIntent(); 

      EditText TimeView = (EditText) findViewById(R.id.editText1); 
      intent.putExtra("time", TimeView.getText().toString()); 

      EditText Noteview = (EditText)findViewById(R.id.editText2); 
      intent.putExtra("note", Noteview.getText().toString()); 

      this.setResult(RESULT_OK, intent); 
      finish(); 
     } 
    } 

感谢你

+0

getCount返回0,因为您应该使用times.size()时创建新的TimeTracker。 – njzk2

+0

你想做什么! –

回答

1

首先,不要在你的Adapter创建任何Activity对象。活动对象是由Android本身创建的,它们用于显示视图。它与适配器无关。

要显示数据的布局必须包含一个<ListView ... />标记,并具有android:id="@+id/whatEverId"属性。

然后,你必须做的就是利用其ID检索ListView对象在你的TimeTracker活动:

ListView lv = (ListView) findViewById(R.id.whatEverId); 

然后创建您的适配器,并告诉你的ListView,你想让它显示将在意见通过自定义适配器创建:

TimeTrackerAdapter adapter = new TimeTrackerAdapter(this, myListOfData); 
lv.setAdapter(adapter); 

myListOfData是包含数据的ArrayList。其余的是明确的,应该做的工作。

+0

感谢您的回答... –

+0

你能找到它吗? – Flawyte

+0

是运行成功.. –