nilesh wani
nilesh wani

Reputation: 1291

How to retrieve listview using BaseAdapter?

I have created android apps to retrieving Listview using BaseAdapter from ArrayList but not displayed anything in Listview. Description of my apps is that I want retrieve listview using BaseAdapter. when my app is run on emulator nothing is displayed on screen when clicked on menu button on my emulator only add button displayed on screen after clicked on add launch the new activity in that activity i have created two editText. after submit, return to prev activity and display the listview.

Please can anybody help me to find out this error

Following is the Adapter class

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;
    }

}

Following is the Activity class

 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();
                }
            }
        }

    }

Following is the 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();
        }
    }

Thanking You

Upvotes: 0

Views: 295

Answers (1)

Mick&#228;el A.
Mick&#228;el A.

Reputation: 9357

First, don't create any Activity object in your Adapter. Activity objects are created by Android itself, and they are used to display Views. It has nothing to do with adapters.

The layout you want to display your data in must contain a <ListView ... /> tag, with an android:id="@+id/whatEverId" attribute.

Then what you have to do is to retrieve the ListView object in your TimeTracker activity using its id :

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

Then create your adapter and tell your ListView that the views you want it to display will be created by your custom adapter :

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

myListOfData is your ArrayList containing the data. The rest is explicit and should do the job.

Upvotes: 1

Related Questions