【问题标题】:Android - Editing ListAdapter Data from another activityAndroid - 从另一个活动编辑 ListAdapter 数据
【发布时间】:2012-08-19 00:34:04
【问题描述】:

我有一个简单的应用程序,它有 3 个活动。第三个活动是 ListActivity,它列出了电影名称及其各自的总票房和年份,选择任何电影都会显示第一个活动中的值。第二个活动是用户可以通过填写 EditText 字段将电影添加到 ListActivity 的地方,这就是我遇到问题的地方。

到目前为止,我看到的示例涉及使用这行代码:

        SampleCustomAdapter adapter = new SampleCustomAdapter(results);
        setListAdapter(adapter);

        adapter.notifyDataSetChanged();

但是,这行代码不适用于我的情况,因为第二个活动中的类扩展了 Activity 而不是 ListActivity。

到目前为止,这是我尝试将新条目添加到列表时的代码。

//if all edit text fields have values and are valid inputs  
if( titleFlag == 1 && grossFlag == 1 && yearFlag == 1){
    //fix stuff here
    //TODO ADD THE NEW MOVIE TO THE ARRAY IN STRINGS.XML

    ArrayList<MyMovies> movieList = new ArrayList<MyMovies>();
    MyMovies newMovie = new MyMovies();

    newMovie.setMovie(title);
    newMovie.setGross(gross);
    newMovie.setYear(year);
    movieList.add(newMovie);


    //go back to the main page after adding
    Intent intent = new Intent(this, com.Android.Lab7.Lab7_084106.class);
    startActivity(intent);
    finish();

}

我也尝试添加 adapter.notifyDataSetChanged();在生成列表后的第三个活动中但无济于事。哦,第三个活动的 onCreate 看起来是这样的:

@Override
public void onCreate(Bundle savedInstanceState) {

    //create stuff
    super.onCreate(savedInstanceState);

    ArrayList<MyMovies> movieList = new ArrayList<MyMovies>();

    String[] movieArray = getResources().getStringArray(R.array.movieArray);
    String[] grossArray = getResources().getStringArray(R.array.worldwideGross);
    String[] yearArray = getResources().getStringArray(R.array.yearArray);

        ArrayList<MyMovies> results = new ArrayList<MyMovies>();
        // make sure the arrays have the same length
        for (int i = 0; i < movieArray.length; i++) {
            MyMovies sr = new MyMovies();
            sr.setMovie(movieArray[i]);
            sr.setGross(grossArray[i]);
            sr.setYear(yearArray[i]);
            results.add(sr);

       }


        SampleCustomAdapter adapter = new SampleCustomAdapter(results);
        setListAdapter(adapter);



    ListView lv = getListView();
    lv.setTextFilterEnabled(true);
    adapter.notifyDataSetChanged();

    //set stuff such that Page2 sends back a result to page 1
    lv.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            sendResult(position);   
        }
    });


}

我使用字符串资源来存储标题、总收入和年份的数组,因为它们很多,而且我对它们进行硬编码是不切实际的。

所以基本上我坚持如何从第二个活动更新第三个活动中的列表。

【问题讨论】:

    标签: android listactivity listadapter


    【解决方案1】:

    在第三个 Activity 中声明。

    public static String title, gross, year;
    public static boolean newMovieAdded=false;
    

    然后,当您在 第二个活动 中时,请执行以下操作

    thirdActivity.title = MyEditText1.getText().toString();

    thirdActivity.gross=MyEditText2.getText().toString();

    thirdActivity.year=MyEditText3.getText().toString();

    if(!year.equals(""))

    newMovieAdded=true;

    仅此而已。当你去第三个活动时,只需编写你的代码

         ArrayList<MyMovies> movieList = new ArrayList<MyMovies>();
    
        if(newMovieAdded){
            MyMovies newMovie = new MyMovies();
            newMovie.setMovie(title);
            newMovie.setGross(gross);
            newMovie.setYear(year);
            movieList.add(newMovie);
            newMovieAdded = false;
    }
    

    【讨论】:

    • 感谢您的帮助。不过我遇到了问题,它进入了 if 语句,但没有显示新电影。我还添加了 adapter.notifyDataSetChanged(); if 块末尾的行。
    • 好的,找到我出错的地方了。现在它给出了 IndexOutOfOBoundsException,因为 strings.xml 文件中的初始列表只有 50 项长,并且不知何故无法显示我添加的新列表。
    • 我更喜欢在java中创建一个动态的String数组。
    • String[] movieString = new String[movieList.Length]
    猜你喜欢
    • 2015-12-04
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多