如何在意图结束后用Contextmenu更新自定义列表视图?

时间:2017-07-17 17:53:08

标签: android listview android-intent

我在我的活动中定制了listview。此列表视图具有上下文菜单。我必须启动一个Intent(Intent.ACTION_CALL)。在Intent之后,我的应用程序显示了一个多线程的AlertDialog.AlertDialog。当用户点击PositiveButton时程序得到一个数字。我想在AdapterContextMenuInfo.position的listview上设置这个值。另一方面,我的自定义listview arraylist由另一个arraylist.size和for方法创建。当用户点击PositiveButton时,如何更新我的listview?

public class AnaMenu extends AppCompatActivity {
    public static final int MENU_Ara = Menu.FIRST + 1;

    static final int AnketDegerlendirmesi = 1337;

    String[] afteractivitydialogitems;
    int selectedPosition ;
    String[] dialogdegerleri;
    int toplamaislemi;
    boolean[] dialogcheckeditems ;

    ArrayList<String> aramadegerlendirmesisonucu = new ArrayList<>();

    TextView sayılar;
    ListView liste;


    ArrayList<String> kullanıcısayıdegerlistesi = new ArrayList<>();

    ArrayList<Integer> mUserselecteditems = new ArrayList<>();


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ana_menu);
        liste = (ListView) findViewById(R.id.oyun);
        //Adapter im.
        OyunTextView oyunTextView = new OyunTextView();

        liste.setAdapter(oyunTextView);

        registerForContextMenu(liste);

        afteractivitydialogitems = getResources().getStringArray(R.array.anket);

        dialogcheckeditems = new boolean[afteractivitydialogitems.length];

        dialogdegerleri = getResources().getStringArray(R.array.anketdeğer);
    }


    class OyunTextView extends BaseAdapter {

        @Override
        public int getCount() {
            Intent i = getIntent();
            final ArrayList<String> secilmis = i.getStringArrayListExtra("listem");

            return secilmis.size();
        }

        @Override
        public Object getItem(int position) {
            return null;
        }

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

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            convertView = getLayoutInflater().inflate(R.layout.oyuntextview, null);
            TextView namesbox = (TextView) convertView.findViewById(R.id.isim);
             sayılar = (TextView) convertView.findViewById(R.id.sayı);
            Intent i = getIntent();
            final ArrayList<String> secilmis = i.getStringArrayListExtra("listem");

            for (int defa =0 ; defa<secilmis.size(); defa++){kullanıcısayıdegerlistesi.add("35");}


            namesbox.setText(secilmis.get(position));

            sayılar.setText(kullanıcısayıdegerlistesi.get(position));

            return convertView;
        }
    }


    public boolean onContextItemSelected(MenuItem item) {
        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();

        switch (item.getItemId()) {
            case MENU_Ara:
                Intent i = getIntent();
                final ArrayList<String> secilmis = i.getStringArrayListExtra("listem");
   selectedPosition = info.position;
                Intent ara = new Intent(Intent.ACTION_CALL);
                ara.setData(Uri.parse("tel:" + secilmis.get(info.position).toString()));
                startActivityForResult(ara, AnketDegerlendirmesi);
   return true;
        }

        return super.onContextItemSelected(item);
    }


    protected void onActivityResult(int requestCode, int resultCode, final Intent data) {
        if (requestCode == AnketDegerlendirmesi){
            final AlertDialog.Builder  mBuilder = new AlertDialog.Builder(AnaMenu.this);
            mBuilder.setTitle("Değerlendirme Formu");
            mBuilder.setIcon(R.drawable.ic_build_black_24dp);
            mBuilder.setMultiChoiceItems(afteractivitydialogitems, dialogcheckeditems, new DialogInterface.OnMultiChoiceClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int position, boolean isChecked) {

                    if (isChecked){
                        mUserselecteditems.add(Integer.valueOf(dialogdegerleri[position]));
                    }
                    if (!isChecked) {
                        if (mUserselecteditems.contains(Integer.valueOf(dialogdegerleri[position]))){
                            mUserselecteditems.remove(Integer.valueOf(dialogdegerleri[position]));
                        }
                    }
                }
            });

            mBuilder.setCancelable(false);
            mBuilder.setPositiveButton("Tamamdır.", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    String items = "";
                    toplamaislemi = 0;
                    for (int item:mUserselecteditems){
                        items += "-" + item + "\n";

                        toplamaislemi = toplamaislemi + item;
                    }

                    //I want to set this value on Listview at calling AdapterContextMenuInfo.position 
                    kullanıcısayıdegerlistesi.remove(selectedPosition);
                    kullanıcısayıdegerlistesi.add(selectedPosition,String.valueOf(toplamaislemi));
                    oyunTextView.notifyDataSetChanged();

                }
            }).show();
        }

        super.onActivityResult(requestCode, resultCode, data);
    }

1 个答案:

答案 0 :(得分:0)

在onCreate()

之前定义适配器
OyunTextView oyunTextView;
int selectedPosition;

在onCreate()

中创建适配器的新实例
@Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ana_menu);
        oyunTextView = new OyunTextView();
}

在菜单项上设置当前位置单击

public boolean onContextItemSelected(MenuItem item) {
        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
        selectedPosition = info.position;
}

更新您的kullanıcısayıdegerlistesi并在点击监听器中通知适配器

mBuilder.setPositiveButton("Tamamdır.", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            String items = "";
                          int toplamaislemi = 0;
                            for (int item:mUserselecteditems){
                                items += "-" + item + "\n";

                     toplamaislemi = toplamaislemi + item;
                     kullanıcısayıdegerlistesi.add(toplamaislemi);
                     oyunTextView.notifyDataSetChanged();
          }