0

我的 Android 列表视图不会通过 notifydatasetchanged() 调用进行更新。

主要代码活动:

    package com.example.jokesbook;

    import java.util.ArrayList;

    import android.app.Activity;
    import android.content.Context;
    import android.content.Intent;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    import android.widget.TextView;

    public class MainActivity extends Activity {
        public final static String EXTRA_MESSAGE = "com.example.jokesbook.MESSAGE";
        CustomAdapter Adapter;
        ListView lv;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

        JokeDB.jokesList = new ArrayList<Joke>();       

        JokeDB.jokesList.add(new Joke("DDD"));


        lv = (ListView)findViewById(android.R.id.list); 

        Adapter= new CustomAdapter(MainActivity.this, R.layout.joke_list_item, JokeDB.jokesList);
        lv.setAdapter(Adapter);
    }//onCreate


    @Override
    public void onResume() {
        super.onResume();  // Always call the superclass method first
        Log.d("jokesbook", "onResume "); 
        Adapter.notifyDataSetChanged();

    }


    class CustomAdapter extends ArrayAdapter<Joke>{

        Context context; 
        int layoutResourceId;    
        ArrayList<Joke> data = null;
        private LayoutInflater mInflater;   

        public CustomAdapter(Context customAdapter, int layoutResourceId, ArrayList<Joke> data) {

            super(customAdapter, layoutResourceId, data);   
            Log.d("jokesbook", "CustomAdapter "); 

            this.layoutResourceId = layoutResourceId;
            this.context = customAdapter;
            this.data = data;
            this.mInflater = LayoutInflater.from(customAdapter);                        
        }

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

            ViewHolder holder = null;              

            if (convertView == null) {

                //item_list
                convertView = mInflater.inflate(R.layout.joke_list_item, null);

                holder = new ViewHolder();

                //fill the views
                holder.joke = (TextView) convertView.findViewById(R.id.ListTextView1);

                convertView.setTag(holder);                     
            } 
            else {
                // Get the ViewHolder back to get fast access to the TextView
                // and the ImageView.
                holder = (ViewHolder) convertView.getTag();//           
            }

            holder.joke.setText(data.get(position).jokeStr);


            return convertView;
        }

        class ViewHolder {      
            TextView joke;  

        }

    }

    /** Called when the user clicks the Add a new joke button */
    public void goNewJoke(View view) {
        Intent intent = new Intent(this, New_joke.class);
        startActivity(intent);
    }

}

它的xml:

<LinearLayout 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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <Button 
        android:id="@+id/ButtonAboveList"
        android:layout_width="500dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:gravity="center"
        android:onClick="goNewJoke"
        android:text="@string/Add_a_new_joke"/>

   <ListView
        android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >
    </ListView>


</LinearLayout>

在另一个活动中将内容添加到 JokeDB.jokesList 时,其代码为:

package com.example.jokesbook;

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 New_joke extends Activity {

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

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.new_joke, menu);
        return true;
    }

    public void addJoke(View view){
        EditText editTextJoke= (EditText)findViewById(R.id.edit_text_jokeToAdd);
        JokeDB.jokesList.add(new Joke(editTextJoke.getText().toString()));
        Intent intent = new Intent(this, MainActivity.class);
        startActivity(intent);
    }

}

它的XML是:

<LinearLayout 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:background="@color/green"
    android:orientation="vertical"
    android:paddingLeft="3dp"
    android:paddingRight="3dp"
    android:paddingTop="3dp"
    tools:context=".New_joke" >

    <EditText
        android:id="@+id/edit_text_jokeToAdd"
        android:layout_width="fill_parent"
        android:layout_height="150dp"
        android:layout_marginBottom="40dp"
        android:background="@color/white"
        android:hint="@string/edit_message" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10dp"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:orientation="horizontal"
        tools:context=".New_joke" >

        <TextView
            android:id="@+id/AuthorText"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:gravity="left"
            android:text="@string/Author"
            android:textColor="@android:color/white"
            android:textSize="25sp" />

        <EditText
            android:id="@+id/edit_text_Author"
            android:layout_width="fill_parent"
            android:layout_height="40dp"
            android:background="@color/white"
            android:hint="@string/Only_letters_allowed"
            android:inputType="textPersonName" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="60dp"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:orientation="horizontal"
        tools:context=".New_joke" >

        <TextView
            android:id="@+id/DateText"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:gravity="left"
            android:text="@string/Date"
            android:textColor="@android:color/white"
            android:textSize="25sp" />

        <EditText
            android:id="@+id/edit_text_Date"
            android:layout_width="fill_parent"
            android:layout_height="40dp"
            android:background="@color/white"
            android:hint="@string/Only_digits_allowed"
            android:inputType="number" />
    </LinearLayout>

    <Button
        android:id="@+id/ButtonAboveList"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:onClick="addJoke"
        android:text="@string/Add" />

</LinearLayout>

尽管在 onResume 中我使用了 notifydatasetchanged() 函数,但我在主要活动前夕看不到更新的列表。

4

1 回答 1

0

尝试这个....

          @Override
     public void onResume() {
    super.onResume();  // Always call the superclass method first
    Log.d("jokesbook", "onResume "); 
    notifyDataSetChanged();

}
于 2013-11-09T15:33:36.057 回答