【问题标题】:My list view doesn't update when the user responds to an activity?当用户响应活动时,我的列表视图没有更新?
【发布时间】:2014-04-13 04:34:42
【问题描述】:

我有一个包含许多片段的主要活动,其中一个包含一个列表视图,带有适配器homeworkListAdapter,这个适配器确实显示了homeworkItems 中的任何初始项目。我的活动打开了另一个活动(HomeworkAddActivity,它从用户那里获取一个字符串并将其放入数组homeworkItems,这一切都有效,因为我已经独立检查了每个步骤。但是当我尝试用这个更新列表视图时新项目(使用.notifyDataSetChanged)它没有更新,我已经尝试修复此问题 3-4 小时,请帮助。

代码

MainActivity

    public static ArrayAdapter<String> homeworkListAdapter;

public static ArrayList<String> homeworkItems; 

  ....

protected void onCreate(Bundle savedInstanceState) {
....
homeworkItems = new ArrayList<String>();

homeworkListAdapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, homeworkItems);
....

 public static class HomeworkListViewFragment extends Fragment {

....

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(
                R.layout.fragment_homework_listview, container, false);

        homeworkListView = (ListView) rootView
                .findViewById(R.id.homework_listview);

        homeworkListView.setAdapter(homeworkListAdapter);

        return rootView;
    }

HomeworkAddActivity

public class HomeworkAddActivity extends ActionBarActivity {

....

public void buttonAddHomework(View v) {
    NavUtils.navigateUpFromSameTask(this);
    EditText editText = (EditText) findViewById(R.id.text_new_homework_name);
    String homeworkItem = (String) editText.getText().toString();
    if (!(TextUtils.isEmpty(homeworkItem))) {
        //MainActivity.homeworkList.addItem(homeworkItem);
        MainActivity.homeworkItems.add(homeworkItem);
        MainActivity.homeworkListAdapter.notifyDataSetChanged();
    }
}
 }

【问题讨论】:

  • 尝试在 buttonAddHomework() 中完全重新创建 homeworkListAdapter。有时 notifyDataSetChanged() 只是因为未知原因无法工作......
  • 我已经尝试过(使用不同的代码),但我会再试一次,但我更希望它做得更整洁/正确
  • 我又试了一遍你的建议,还是更新列表失败
  • 也许if (!(homeworkItem == null)) 不会通过?你检查了吗?也尝试使用if (!TextUtils.isEmpty(homeworkItem)) - 它同时检查空字符串和空字符串。
  • 我尝试将按钮文本更改为homeworkItems 中的第一项(get(0)),同时评论navigateUp,它运行良好,所以所有这些都有效。

标签: java android android-fragments android-listview notifydatasetchanged


【解决方案1】:

你能做这样的检查吗:

if (!TextUtils.isEmpty(homeworkItem)) {
Toast.makeText(getBaseContext(),"ADDING AN ITEM!!!",Toast.LENGH_SHORT).show()
    homeworkItems.add(homeworkItem);
    homeworkListAdapter.notifyDataSetChanged();
}

只是为了确保它通过检查。如果是这样(你会看到吐司)然后尝试

    if (!TextUtils.isEmpty(homeworkItem)) {
        homeworkItems.add(homeworkItem);
homeworkListAdapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, homeworkItems);
homeworkListView.setAdapter(homeworkListAdapter);
    }

更新
最后一件事我假设你的 ListView 的属性 android:height 设置为“wrap_content” - 尝试将其更改为“match_parent” :) 它更新但你看不到它 - 尝试滚动:))如果这是你应该回退到notifyDatasetChanged()

【讨论】:

  • 还是不行,两件事我都做了(第一个显示吐司)
  • 我已经尝试过你的更新,但仍然没有用,我会在某个时候更彻底地尝试你的建议
  • 您看到您的 ListView 存在问题 - 它不可见。那是唯一可能的事情。尝试将其宽度和高度都设置为 match_parent 并确保您没有被其他布局或控件覆盖
  • 是的,稍后再看看。如果我对项目进行硬编码 onCreate 是可见的,但我猜这与使用动态数据的 wrap_content 不同
  • 然后 AOS 创建一个具有 wrap_content 高度的空 ListView,它将始终是不可见的,因为创建时它的高度为零,因为没有什么可显示的。添加项目时它不会长大。好吧,在这种情况下 invalidate() 可能会有所帮助,但我不确定
猜你喜欢
  • 1970-01-01
  • 2017-09-15
  • 2019-08-17
  • 2020-08-27
  • 2018-05-05
  • 2010-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多