android - 从第二个 Activity 返回后更新第一个 Activity 中的 ListView

标签 android listview

我在一个 Activity 中有一个 ListView ,在自定义适配器中有一个信息图标。当用户点击该信息按钮时,下一个 Activity 将打开,在标记下一个 Activity 的出席后,当用户点击更新按钮时,第二个 Activity 应该完成,第一个 Activity ListView 应该更新。

我成功做了什么: 我已成功标记出勤并更改 ListView 的颜色,但我是在关闭第二个 Activity 并重新启动第一个 Activity 后这样做的。通过这种方式, ListView 会因为再次开始 Activity 而得到更新。

我不能做什么: 我希望当用户点击更新按钮时,只有 finish() 会调用并且用户返回到之前的第一个 Activity 并更新 ListView 。但是当我这样做时, ListView 不会得到更新。我必须返回并再次打开 Activity ,然后 ListView 才会更新,否则不会。我不要那个。我还尝试在第一个 Activity 的 onResume 方法中通知适配器,以便当用户从第二个 Activity 返回时,第一个 Activity ListView 适配器将由于 onResume 方法而更新,但它不起作用。请帮忙

我的 Listview Activity 代码:

public class TeacherWebserviceMainList extends Activity {
int attentedncemarkedCount = 0;
TextView addteacher;
DatabaseHandler databasehandler;
DetailsTeacherwebservice details;
String emis;

ArrayList<DetailsTeacherwebservice> addas = new ArrayList<DetailsTeacherwebservice>();
CustomAdapterTeacherWebservice cusadapter;
ArrayList<DetailsTeacherwebservice> teacherList;
private ListView listcontent = null;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.teacherwebservicemainlist );
    addteacher = (TextView) findViewById(R.id.addteachermenu);

    databasehandler = new DatabaseHandler(TeacherWebserviceMainList.this);
    listcontent = (ListView) findViewById(R.id.teacher_list);
    teacherList = databasehandler.teacherwebserviceList(emis);
    Rsults();
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 1) {
        if(resultCode == RESULT_OK) {
            String update = data.getStringExtra("update");
            if(update.equals("1"))
            {
                //cusadapter.
                CustomAdapterTeacherWebservice adapter = new CustomAdapterTeacherWebservice(this, addas);

                listcontent.setAdapter(adapter);
            }
        }
    }
}

private void Rsults() {
    addas.clear();
    //DatabaseHandler databaseHandler=new DatabaseHandler(this);
    //ArrayList<ArrayList<Object>> data =  databaseHandler.abcTeacherNew();

    for (int p = 0; p < teacherList.size(); p++) {
        details = new DetailsTeacherwebservice();
        //ArrayList<Object> baris = data.get(p);
        details.setId(teacherList.get(p).getId());
        details.setTeachername(teacherList.get(p).getTeachername());
        details.setTeachercnic(teacherList.get(p).getTeachercnic());
        details.setTeacherno(teacherList.get(p).getTeacherno());
        details.setTeachergender(teacherList.get(p).getTeachergender());
        details.setAttendance(teacherList.get(p).getAttendance());
        details.setTeacherattendancedetails(teacherList.get(p).getTeacherattendancedetails());
        details.setAttendancedatesince(teacherList.get(p).getAttendancedatesince());
        details.setAttendancetrasnferschool(teacherList.get(p).getAttendancetrasnferschool());
        addas.add(details);
    }
    cusadapter = new CustomAdapterTeacherWebservice(TeacherWebserviceMainList.this, addas);
    listcontent.setAdapter(cusadapter);
    listcontent.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                                long id) {


        }
    });
}

我的列表适配器代码

 public class CustomAdapterTeacherWebservice extends BaseAdapter {

private static ArrayList<DetailsTeacherwebservice> searchArrayList;
DatabaseHandler databaseHandler;
private Context context;
private LayoutInflater mInflater;

public CustomAdapterTeacherWebservice(Context context, ArrayList<DetailsTeacherwebservice> results) {
    searchArrayList = results;
    mInflater = LayoutInflater.from(context);
    databaseHandler = new DatabaseHandler(context);
}

@Override
public int getCount() {
    return searchArrayList.size();
}

@Override
public Object getItem(int p) {
    return searchArrayList.get(p);
}

@Override
public long getItemId(int p) {
    return p;
}

public int getViewTypeCount() {

    return 500;
}



@Override
public int getItemViewType(int position) {

    return position;
}

@Override
public View getView(final int p, View v, ViewGroup parent) {
    ViewHolder holder;
    context = parent.getContext();
    if (v == null) {
        v = mInflater
                .inflate(R.layout.teacherwebserviceadapter, null);
        holder = new ViewHolder();

        holder.name = (TextView) v.findViewById(R.id.teacher_name);
        holder.cnic = (TextView) v.findViewById(R.id.teacher_cnic);
        holder.no = (TextView) v.findViewById(R.id.teacher_phone);
        holder.gender = (TextView) v.findViewById(R.id.gender);
        holder.status = (TextView) v.findViewById(R.id.status);
        holder.info = (ImageView) v.findViewById(R.id.edit);
        holder.l1 = (LinearLayout) v.findViewById(R.id.main);


        v.setTag(holder);
    } else {
        holder = (ViewHolder) v.getTag();
    }

    holder.name.setText(searchArrayList.get(p).getTeachername());
    holder.cnic.setText(searchArrayList.get(p).getTeachercnic());
    holder.no.setText(searchArrayList.get(p).getTeacherno());
    holder.gender.setText(searchArrayList.get(p).getTeachergender());
    holder.status.setText(searchArrayList.get(p).getAttendance());
    if (searchArrayList.get(p).getAttendance().equals("Absent"))
    {
        holder.l1.setBackgroundColor(Color.parseColor("#DB674D"));
    }
    if (searchArrayList.get(p).getAttendance().equals("Present"))
    {
        holder.l1.setBackgroundColor(Color.parseColor("#7EB674"));
    }
    if (searchArrayList.get(p).getAttendance().equals("Transfer Out"))
    {
        holder.l1.setBackgroundColor(Color.parseColor("#FBE87C"));
    }
    if (searchArrayList.get(p).getAttendance().equals("Resigned"))
    {
        holder.l1.setBackgroundColor(Color.parseColor("#4FC3F7"));
    }
    holder.info.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Intent view_order_intent = new Intent(context, Teacherwebservicemainlistupdate.class);
            view_order_intent.putExtra("ID", searchArrayList.get(p).getId());
            view_order_intent.putExtra("tname", searchArrayList.get(p).getTeachername());
            view_order_intent.putExtra("tgender", searchArrayList.get(p).getTeachergender());
            view_order_intent.putExtra("tcnic", searchArrayList.get(p).getTeachercnic());
            view_order_intent.putExtra("tno", searchArrayList.get(p).getTeacherno());
            view_order_intent.putExtra("tatt", searchArrayList.get(p).getAttendance());
            view_order_intent.putExtra("tattdetails", searchArrayList.get(p).getTeacherattendancedetails());
            view_order_intent.putExtra("tattdatesince", searchArrayList.get(p).getAttendancedatesince());
            view_order_intent.putExtra("tatttrasnferout", searchArrayList.get(p).getAttendancetrasnferschool());
            //context.startActivity(view_order_intent);
            ((Activity)context).startActivityForResult(view_order_intent, 1);
        }
    });
    return v;
}

static class ViewHolder {
    TextView name, cnic, no, gender,status;
    ImageView info;
    LinearLayout l1;

}

在此处的适配器代码中,当单击 INFO 按钮时,另一个 Activity 将启动,用户可以在其中更新出勤情况。

这是单击按钮时更新 Activity 代码:

  update.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
        DetailsTeacherwebservice schoolinfo = new DetailsTeacherwebservice();
                schoolinfo.setTeachername(teachername.getText().toString());
                schoolinfo.setTeacherno(teacherno.getText().toString());
                schoolinfo.setTeachercnic(teachercnic.getText().toString());
                schoolinfo.setTeachergender(teachergender.getText().toString());
                schoolinfo.setAttendance(teachergroupstr);
                schoolinfo.setTeacherattendancedetails(absentgrpstr);
                schoolinfo.setAttendancedatesince(txtDate.getText().toString());
                schoolinfo.setAttendancetrasnferschool(transferOutSchool.getText().toString());
                databasehandler.updateteacherwebservice(schoolinfo, emis, identity);
                Toast.makeText(Teacherwebservicemainlistupdate.this, "Updated Successfully", Toast.LENGTH_SHORT).show();
                Intent intent = new Intent();
                intent.putExtra("update", "1");
                setResult(RESULT_OK, intent);
                finish();

            }
        }
    });

单击更新按钮时,我可以再次启动 ListView Activity ,但这会更改单击的列表项的索引,即因为 Activity 再次启动。我想要的是,如果我单击第 10 个项目,那么当下一个 Activity 打开并且用户更新出勤率时,它会返回到同一索引位置上的上一个 Activity ,这样用户就不必再次滚动以返回第 10 个项目

最佳答案

为列表项点击添加此代码:

 Intent i = new Intent(context, YourAcitivityName.class);
     i.putExtra("position",p);
    startActivityForResult(i, 1);

在更新按钮中添加此代码:

Intent intent = new Intent();
intent.putExtra("update", "1");
intent.putExtra("position",getIntent().getIntExtra("position",0));
setResult(RESULT_OK, intent);        
finish();

当您从 Activity 返回到实现 ListView 的 Activity 时,此方法称为:

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 1) {
         if(resultCode == RESULT_OK) {
             String update = data.getStringExtra("update");
             if(update.equals("1"))
             {
               // add your code to update list view
                 teacherList = databasehandler.teacherwebserviceList(emis);
                 Rsults();
                  YourAdapterClassName adapter = new YourAdapterClassName(this, arrList);

                  listView.setAdapter(adapter);
               listView.smoothScrollToPosition(getIntent().getIntExtra("position",0));
              }
         }     
    }
} 

关于android - 从第二个 Activity 返回后更新第一个 Activity 中的 ListView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48182363/

相关文章:

android - 使用默认的android图像查看器显示图片

android - 如何为 WindowBackground 设置自定义颜色

android - 带有 SpannableStringBuilder 和 ImageSpan 的 EditText 不能正常工作

android - 如何使用 SherlockActionbar 实现带有 ListView 的搜索小部件?

java - Android 空 Activity 和空白 Activity

java - 如何将 Pixmap/Texture 加载到 AssetManager 中?

java - Android:java.lang.IllegalStateException:适配器的内容已更改但ListView未收到通知

java - 当我添加不存在的字符串时,过滤后的 ListView 应该为空

java - 在 Android 中选择列表项时使列表项在屏幕上居中?

c# - 如何禁用 ListView 中的复选框?