2013-01-15 38 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

是運行成功.. –