2016-04-21 5 views
1

Я хотел бы передать выбранный элемент "ID" из ListView в POPUPMENU, то mainActivity:Android передача выбранного элемента в ListView для POPUPMENU

public class ListChildrenActivity extends AppCompatActivity implements Config, PopupMenu.OnMenuItemClickListener { 
private static final String TAG = "ListChildrenActivity"; 

ProgressDialog progressDialog; 
Toolbar toolbar; 
ChildrenAdapter adapter; 
ListView listView; 
int idConnexion, id; 
private SwipeRefreshLayout refreshLayout; 
Intent intent; 
Child childObj; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_list_child); 

    toolbar = (Toolbar) findViewById(R.id.toolbar_actionbar); 
    setSupportActionBar(toolbar); 
    getSupportActionBar().setTitle("Listes des enfants"); 
    toolbar.setNavigationIcon(R.drawable.back); 
    toolbar.setNavigationOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(getBaseContext(), MainMedecinActivity.class); 
      startActivity(intent); 
     } 
    }); 

    refreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_layout); 
    refreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 
     @Override 
     public void onRefresh() { 
      showChildren(); 
     } 
    }); 




    showChildren(); 

    listView = (ListView) findViewById(R.id.listview); 
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     public void onItemClick(AdapterView<?> myAdapter, View view, int itemInt, long lng) { 
      //String selectedFromList =(String) (lv.getItemAtPosition(myItemInt)); 

      //Toast.makeText(ListChildrenActivity.this, selectedFromList, Toast.LENGTH_SHORT).show(); 
      //TextView v = (TextView)view.findViewById(R.id.tv); 
      //String itemId = v.getText().toString(); 
      childObj = (Child) listView.getItemAtPosition(itemInt); 
      id = childObj.getIdEnfant(); 
      Toast.makeText(ListChildrenActivity.this, ""+id, Toast.LENGTH_SHORT).show(); 


     } 
    }); 
} 

public void showMenu(View v) { 
    PopupMenu popup = new PopupMenu(this, v); 
    popup.setOnMenuItemClickListener(this); 
    popup.inflate(R.menu.poupup_menu); 
    popup.show(); 
} 

private ArrayList<Child> generateData(String content) { 
    ArrayList<Child> children = new ArrayList<Child>(); 
    JSONObject jObj = null; 
    JSONArray ja = null; 
    try { 
     ja = new JSONArray(content); 
     for (int i = 0; i < ja.length(); i++) { 
      jObj = ja.getJSONObject(i); 
      children.add(new Child(jObj.getInt("idEnfant"), jObj.getString("nomEnfant"), jObj.getString("prenomEnfant"))); 
     } 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 

    return children; 
} 

public void showChildren() { 

    if (!validate()) { 
     failed(); 
     return; 
    } 

    SharedPreferences prefs = getSharedPreferences("Info_Connexion", Context.MODE_PRIVATE); 
    idConnexion = prefs.getInt("idConnexion", 0); 

    progressDialog = new ProgressDialog(ListChildrenActivity.this); 
    progressDialog.setIndeterminate(true); 
    progressDialog.setMessage("La liste des enfants ..."); 
    progressDialog.show(); 

    if (isOnline()) { 
     requestData(SERVER_URL + "enfant/read/", idConnexion); 
    } else { 
     Toast.makeText(ListChildrenActivity.this, "Eroor network", Toast.LENGTH_SHORT).show(); 

    } 
} 

private void requestData(String url, int id) { 
    DateFormat df = new SimpleDateFormat("MM/dd/yyyy"); 
    RequestPackage p = new RequestPackage(); 
    p.setMethod("POST"); 
    p.setUri(url); 
    p.setParam("idMedecin", String.valueOf(id)); 

    MessagesTask task = new MessagesTask(); 
    task.execute(p); 
} 

protected boolean isOnline() { 
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
    return netInfo != null && netInfo.isConnectedOrConnecting(); 
} 

public void success(final int id, final ProgressDialog progressDialog, String content, SwipeRefreshLayout refreshLayout) { 

    // 1. pass context and data to the custom adapter 
    adapter = new ChildrenAdapter(this, generateData(content)); 

    // 2. Get ListView from activity_main.xml 


    // 3. setListAdapter 
    listView.setAdapter(adapter); 
    if (id != 0) { 
     refreshLayout.setRefreshing(false); 
     progressDialog.dismiss(); 
    } else { 
     refreshLayout.setRefreshing(false); 
     progressDialog.dismiss(); 
     Toast.makeText(ListChildrenActivity.this, "Eroor server or input", Toast.LENGTH_SHORT).show(); 
    } 


} 

public boolean validate() { 
    boolean valid = true; 

    return valid; 
} 

public void failed() { 
    Toast.makeText(getBaseContext(), "List Children failed", Toast.LENGTH_LONG).show(); 
} 


@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case android.R.id.home: 
      onBackPressed(); 
      return true; 

    } 
    return super.onOptionsItemSelected(item); 
} 

@Override 
public boolean onMenuItemClick(MenuItem item) { 
    TextView scoreView = (TextView) findViewById(R.id.score); 
    switch (item.getItemId()) { 
     case R.id.infos: 
      intent = new Intent(getBaseContext(), ChildInformationsActivity.class); 
      intent.putExtra("idEnfant", id); 
      startActivity(intent); 
      return true; 
     case R.id.signes_diagnostic: 
      intent = new Intent(getBaseContext(), ChildSignesDiagnosticActivity.class); 
      intent.putExtra("idEnfant", id); 
      startActivity(intent); 
      return true; 
     case R.id.bilan_bio: 
      intent = new Intent(getBaseContext(), ChildBilanBioActivity.class); 
      intent.putExtra("idEnfant", id); 
      startActivity(intent); 
      return true; 
     case R.id.traitement_medical: 
      intent = new Intent(getBaseContext(), ChildTraitementMedicalActivity.class); 
      intent.putExtra("idEnfant", id); 
      startActivity(intent); 
      return true; 
     case R.id.imagerie: 
      intent = new Intent(getBaseContext(), ChildImagerieActivity.class); 
      intent.putExtra("idEnfant", id); 
      startActivity(intent); 
      return true; 
     default: 
      return false; 
    } 
} 


private class MessagesTask extends AsyncTask<RequestPackage, String, String> { 

    @Override 
    protected String doInBackground(RequestPackage... params) { 

     String content = HttpManager.getData(params[0]); 

     return content; 
    } 

    @Override 
    protected void onPreExecute() { 
     System.out.println("onPreExecute"); 
    } 

    @Override 
    protected void onPostExecute(String content) { 
     Log.i(TAG, "------------------------" + content); 

     success(idConnexion, progressDialog, content, refreshLayout); 

    } 
} 

} 

enter image description here

класс адаптера:

public class ChildrenAdapter extends ArrayAdapter<Child> { 

private final Context context; 
private final ArrayList<Child> childrenArrayList; 

public ChildrenAdapter(Context context, ArrayList<Child> childrenArrayList) { 

    super(context, R.layout.row_child, childrenArrayList); 

    this.context = context; 
    this.childrenArrayList = childrenArrayList; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    // 1. Create inflater 
    LayoutInflater inflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    // 2. Get rowView from inflater 
    View rowChildView = inflater.inflate(R.layout.row_child, parent, false); 

    // 3. Get the two text view from the rowView 
    TextView nameView = (TextView) rowChildView.findViewById(R.id.name); 
    TextView dateView = (TextView) rowChildView.findViewById(R.id.date); 
    TextView scoreView = (TextView) rowChildView.findViewById(R.id.score); 
    // 4. Set the text for textView 
    //String text = childrenArrayList.get(position).getNomEnfant())+" "+childrenArrayList.get(position).getNomEnfant(); 
    nameView.setText(childrenArrayList.get(position).getNomEnfant()+" "+childrenArrayList.get(position).getPrenomEnfant()); 
    dateView.setText("22/12/2012"); 
    scoreView.setText(String.valueOf(childrenArrayList.get(position).getIdEnfant())); 
    scoreView.setBackgroundResource(R.drawable.circular_textview); 

    // 5. retrn rowView 
    return rowChildView; 
} 


} 

Когда я нажимаю на строку списка, я получаю «id», но как я могу передать ее в popupMenu.

Решение: это просто добавить SetTag (позиция) в ImageView в GetView, то:

public void showMenu(View v) { 
    PopupMenu popup = new PopupMenu(this, v); 
    popup.setOnMenuItemClickListener(this); 
    popup.inflate(R.menu.poupup_menu); 
    popup.show(); 
    listView.performItemClick(v, (Integer) v.getTag(),listView.getItemIdAtPosition((Integer) v.getTag())); 
} 
+0

может у меня объяснить ответ немного больше .... я должен реализовать его как можно скорее –

ответ

0

Вы можете использовать интерфейс для обмена данными между ними

В классе адаптера, инициализировать

private OnItemSelectedListener mListener; 

и добавляйте эти методы

public void setOnItemClickLister(OnItemSelectedListener mListener) { 
     this.mListener = mListener; 
    } 
//Creating an interface 

    public interface OnItemSelectedListener { 
     public void onItemSelected(String s); 
    } 

в функции OnClick адаптер

использовать этот

mListener.onItemSelected(id); 
//id is your string 

вы можете вызвать его в MainActivity,

adapter.setOnItemClickLister(new OnItemSelectedListener() { 
       @Override 
       public void onItemSelected(String s) { 
//you will get the string here, you can pass it as an argument in popup menu 


     } 
     }); 
+0

благодарю вас за ответ, но я получаю NullPointerException в adapter.setOnItemClickLister –

+0

вы назвали его перед инициализацией? – MrRobot9

+0

Вы должны называть его успешной функцией – MrRobot9

0

на адаптере стороне:

view.findViewById(R.id.menu_btn).setTag(id); 

На ListAct ivity Сторона:

public void showPopUp(View v){ 
     currentId = v.getTag().toString(); 
     PopupMenu popupMenu=new PopupMenu(this,v); 
     popupMenu.setOnMenuItemClickListener(ListActivity.this); 
     MenuInflater inflater=popupMenu.getMenuInflater(); 
     inflater.inflate(R.menu.my_pop_up,popupMenu.getMenu()); 
     popupMenu.show(); 
    } 

На стороне XML:

<ImageButton android:id="@+id/menu_btn" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@drawable/ic_overflow" 
      android:layout_marginStart="10dp" 
      android:layout_marginEnd="20dp" 
      android:layout_alignParentEnd="true" 
      android:layout_centerVertical="true" 
      android:onClick="showPopUp"/> 

Примечание: OnClick = "showPopUp" имеет очень важное значение здесь. Это должно быть полезно. Спасибо.