【问题标题】:Listview not getting updated列表视图未更新
【发布时间】:2014-03-07 10:06:20
【问题描述】:

我在 MyTaskFragment 中有一个 Listview 扩展了 Fragment 类,它显示任务名称和任务状态。当我单击列表视图的特定行时,我会得到一个名为 MyTaskonClick 的活动,我可以在其中更新任务的状态。问题是,在我关闭活动后,MytaskFragment 中的列表视图上的状态没有得到更新。任何人都可以提出解决方案。我的代码如下:

public class MyTaskFragment extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {    
    View rootView = inflater.inflate(R.layout.fragment_pages, container, false);
    Databasehandler db=new Databasehandler(getActivity().getApplicationContext());
    final ListView l=(ListView) rootView.findViewById(R.id.listViewmytask);


        int count=db.getcounttask();
        if(count==0)
        {
            Toast.makeText(getActivity(), "No Task to Display", Toast.LENGTH_SHORT).show();
        }
        else
        {
    if(id.compareTo("empty")!=0)
    {
        val1.clear();
    val1=db.getTaskReceived(id);


     ListAdapter k=new SimpleAdapter(getActivity(),val1,R.layout.mytask,new String[]{"TaskId","heading","status"},new int[]{R.id.View1,R.id.View2,R.id.ViewStatus});

    l.setAdapter(k);
    }
    Toast.makeText(getActivity(), "arg2"+val1, Toast.LENGTH_SHORT).show();

    l.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            // TODO Auto-generated method stub
            TextView tv2=(TextView) arg1.findViewById(R.id.View1);
            String t=tv2.getText().toString();
             Intent i4=new Intent(getActivity(),Mytaskonclick.class);
                i4.putExtra("taskId",t);
                // startActivityForResult(i4, 0);
                   startActivity(i4);
        }
    });

        }
    return rootView;

}

Mytaskonclick.class s1.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            TextView tv=(TextView)findViewById(R.id.sentstatus);
            tv.setText("accepted");
            queryValues.put("status","accepted");
            queryValues.put("taskid",id);
            db.updateTask(queryValues);
            //Log.w("id",""+id+queryValues);
        }
    });

【问题讨论】:

    标签: android sqlite listview fragment


    【解决方案1】:

    几个选项:

    • 覆盖 onResume() 并在其中刷新您的 ListView(但请注意不要在第一次启动 Activity 时同时刷新它)。
    • 使用startActivityForResult(...) 启动活动并覆盖包含ListView 的活动/片段中的onActivityResult(...) 并在此时刷新它。

    要刷新,你必须调用listView.notifyDataSetChanged()

    【讨论】:

    • listView.notifyDataSetChanged() 没有帮助
    • 这可能意味着您没有更新模型或适配器不知道您在模型中所做的更改。
    【解决方案2】:

    使用startActivityForResult(i4, 0);,然后在您的onActivityResult() 调用getListView().invalidateVìews();

    【讨论】:

    • 如果你使用那个方法,不要在startActivityForResult方法中使用0,而是在某处有一个常数。此代码在 onActivityResult() 方法中重复使用,以识别您从哪里返回。
    • 我无法使用 getListview(),因为我正在使用片段
    • 哦!我看到您没有使用 ListFragment ,我建议您将 Fragment 更改为 ListFragment 如果您不想这样做,请致电 ListView l=(ListView) rootView.findViewById(R.id.listViewmytask);l.invalidateViews();
    【解决方案3】:

    使用 ArrayAdapter 代替 ListAdapter。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-23
      • 2015-11-12
      • 2013-08-12
      相关资源
      最近更新 更多