首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ListView项没有显示在主活动上

ListView项没有显示在主活动上
EN

Stack Overflow用户
提问于 2014-10-14 06:38:41
回答 4查看 127关注 0票数 0

我是android开发的初学者。我试图使用Adapter从一个ArrayList的Workout项发送数据到MainActivity,但是我对基本适配器的理解不是很好。这是我的代码:

WorkoutActivity.java:

代码语言:javascript
运行
复制
    import java.util.ArrayList;
    import java.util.List;

    import android.app.Activity;
    import android.app.FragmentManager;
    import android.content.Context;
    import android.content.Intent;
    import android.content.SharedPreferences;
    import android.content.SharedPreferences.Editor;
    import android.os.Bundle;
    import android.os.SystemClock;
    import android.preference.PreferenceManager;
    import android.view.LayoutInflater;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.Button;
    import android.widget.Chronometer;
    import android.widget.TextView;

    public class WorkoutActivity extends Activity {

    WorkoutItemAdapter workoutItemAdapter;

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




    public class WorkoutItemAdapter extends BaseAdapter{

        int rowCount = 1;
        List<WorkoutItem> workoutsList = getDataForListView();

        public WorkoutItem getWorkout(int position)
        {
            return workoutsList.get(position);
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            if(convertView == null){
                LayoutInflater inflater = (LayoutInflater) WorkoutActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                convertView = inflater.inflate(R.layout.workout_item, parent, false);
            }

            TextView workoutNum = (TextView) convertView.findViewById(R.id.workout_col);
            TextView workoutTime = (TextView) convertView.findViewById(R.id.time_col);      

            WorkoutItem workout = workoutsList.get(position);

            workoutNum.setText(workout.workoutNum);
            workoutTime.setText(workout.time);

            return convertView;
        }

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

        @Override
        public WorkoutItem getItem(int position) {
            // TODO Auto-generated method stub
            return workoutsList.get(position);
        }

        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return position;
        }
        public void addRow() {
            rowCount++;
            notifyDataSetChanged();
        }
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.workout, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }


    @Override
    public void onBackPressed() {
        moveTaskToBack(true);
    }

    public List<WorkoutItem> getDataForListView()
    {
        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
        String workoutTime = prefs.getString("Workout Time", "");

        List<WorkoutItem> workoutsList = new ArrayList<WorkoutItem>();

        for(int i = 0; i < (workoutsList.size() + 1); i++)
        {
            WorkoutItem workout = new WorkoutItem();
            workout.workoutNum = "Workout " + (i+1);
            workout.time = workoutTime;

            workoutsList.add(workout);
        }

        return workoutsList;
    }

    public void startAndStopTimer(View view)
    {
        long totalTime = 0;

        Button startAndStop = (Button) findViewById(R.id.button1);
        Chronometer c = (Chronometer) findViewById(R.id.chronometer1);
        if(startAndStop.getText().equals("Start"))
        {
            c.setBase(SystemClock.elapsedRealtime() + totalTime);
            c.start();
            startAndStop.setText("Pause");

        }
        else
        {
            totalTime = c.getBase() - SystemClock.elapsedRealtime();
            c.stop();
            startAndStop.setText("Start");
        }
    }

    public void save(View view)
    {
        // create broadcast receiver saying ...saved.

        // Add ArrayList value to arrayList
        Chronometer timer = (Chronometer) findViewById(R.id.chronometer1);

        SharedPreferences timerSettings = PreferenceManager.getDefaultSharedPreferences(this);
        Editor editor = timerSettings.edit();
        editor.putString("Workout Time", timer.getText().toString());
        editor.commit();

        // go back to main activity.
        Intent intent = new Intent(WorkoutActivity.this, OverviewActivity.class);
        startActivity(intent);
        finish();
    }

    public void cancel(View view)
    {
        // go back to main activity
        Intent intent = new Intent(WorkoutActivity.this, OverviewActivity.class);
        startActivity(intent);
        finish();
    }
    }

OverviewActivity.java:

代码语言:javascript
运行
复制
    import edu.uark.csce.razorrunner.WorkoutActivity.WorkoutItemAdapter;
    import android.app.Activity;
    import android.content.Intent;
    import android.content.SharedPreferences;
    import android.os.Bundle;
    import android.preference.PreferenceManager;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.ListView;
    import android.widget.TextView;


    public class OverviewActivity extends Activity{ 

    WorkoutItemAdapter workoutAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_overview);
        LoadPreferences();  
        LoadListView();
    }
    private void LoadListView() {
        // TODO Auto-generated method stub
        ListView workoutList = (ListView) findViewById(R.id.workout_list);
        workoutList.setAdapter(workoutAdapter);
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.overview, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    private void LoadPreferences()
    {       
            SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
            String Name = sharedPreferences.getString("Name", "");

            TextView textView = (TextView) findViewById(R.id.textView2);
            textView.setText(Name);
    }

    public void openWorkoutActivity(View view)
    {
        Intent intent = new Intent(OverviewActivity.this, WorkoutActivity.class);
        startActivity(intent);
        finish();
    }
    public void openProfileActivity(View view)
    {
        Intent intent = new Intent(OverviewActivity.this, ProfileActivity.class);
        startActivity(intent);
        finish();
    }
    public void openHistoryActivity(View view)
    {
        Intent intent = new Intent(OverviewActivity.this, HistoryActivity.class);
        startActivity(intent);
        finish();
    }
    }

activity_overview.xml:

代码语言:javascript
运行
复制
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="edu.uark.csce.razorrunner.OverviewActivity" >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <Button
            android:id="@+id/profileButton"
            android:layout_width="80dp"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:onClick="openProfileActivity"
            android:text="Profile" />

        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:text="Name"
            android:textAppearance="?android:attr/textAppearanceLarge" />
    </RelativeLayout>

    <ListView
        android:id="@+id/workout_list"
        android:layout_width="wrap_content"
        android:layout_height="195dp"
        android:layout_weight="0.19" >

    </ListView>

    <Button
        android:id="@+id/startNewWorkout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0"
        android:onClick="openWorkoutActivity"
        android:text="Start New Workout!"
        android:typeface="sans" />

</LinearLayout>

activity_workout.xml:

代码语言:javascript
运行
复制
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="edu.uark.csce.razorrunner.WorkoutActivity" >

    <Button
        android:id="@+id/Button01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/button2"
        android:layout_alignBottom="@+id/button2"
        android:layout_alignRight="@+id/button1"
        android:text="Cancel"
        android:onClick="cancel" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_toLeftOf="@+id/Button01"
        android:text="Save"
        android:onClick="save" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/Button01"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_marginRight="22dp"
        android:text="Start"
        android:onClick="startAndStopTimer" />

    <TextView
        android:id="@+id/time_col"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView2"
        android:layout_alignParentTop="true"
        android:text="New Workout"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/time_col"
        android:layout_marginTop="18dp"
        android:text="Calories Burned"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <TextView
        android:id="@+id/TextView01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView2"
        android:layout_below="@+id/textView2"
        android:layout_marginTop="14dp"
        android:text="Duration"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <TextView
        android:id="@+id/TextView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/textView2"
        android:layout_alignBottom="@+id/textView2"
        android:layout_alignRight="@+id/button1"
        android:layout_toRightOf="@+id/button2"
        android:ems="10"
        android:text="0" 
        android:textAppearance="?android:attr/textAppearanceLarge">

        <requestFocus />
    </TextView>

    <Chronometer
        android:id="@+id/chronometer1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/TextView01"
        android:layout_alignLeft="@+id/TextView1"
        android:layout_alignRight="@+id/TextView1"
        android:text="Chronometer" />

</RelativeLayout>

我想显示每次单击“保存”时每个列表项的锻炼次数和持续时间,但目前,每次单击“保存”都会得到一个空白的ListView。关于这一主题的任何帮助和/或补充资料都是有用的。

EN

Stack Overflow用户

发布于 2014-10-14 07:10:11

你还没有初始化workoutAdapter...only声明..。因此,workoutAdapter is null....which意味着适配器的大小为0,...which表示列表视图中没有行.

在将适配器设置为listview之前,..you必须初始化workoutAdapter,即

代码语言:javascript
运行
复制
workoutAdapter=new WorkoutItemAdapter(getDataForListView());

创建渐缩构造器并传递列表数组

代码语言:javascript
运行
复制
public class WorkoutItemAdapter extends BaseAdapter{

    int rowCount = 1; //don't know about that
    List<WorkoutItem> workoutsList;

    public WorkoutItemAdapter(List<WorkoutItem> tmp)
    {
        this.workoutsList=tmp; //setting the list array to datamember of this adapter
    }
票数 0
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26354161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档