-1

我想将列表视图的选定项目的se_id和se_name发送到其他活动。我从数据库中检索了se_id和se_name,但它只会在列表中显示se_name。如果用户从列表中选择一个名称,它将使用户访问另一个活动,其中应该发送所选项目的se_id和se_name。这是我的SEList.class,我将在ChooseOptionSE.class中发送se_id和se_name。我如何使用意图发送它?请尽可能尽快回复。提前致谢。从数据库中检索数据并将其放入列表中后,我想将列表中选定项目的ID发送到另一个活动

package com.example.user.entapp; 

    import android.app.ProgressDialog; 
    import android.content.Intent; 
    import android.os.AsyncTask; 
    import android.support.v7.app.AppCompatActivity; 
    import android.os.Bundle; 
    import android.view.View; 
    import android.widget.AdapterView; 
    import android.widget.ArrayAdapter; 
    import android.widget.ListView; 
    import android.widget.Toast; 

    import org.apache.http.NameValuePair; 
    import org.apache.http.message.BasicNameValuePair; 
    import org.json.JSONArray; 
    import org.json.JSONObject; 

    import java.util.ArrayList; 
    import java.util.List; 

    public class SEList extends AppCompatActivity { 

    int sup_id, val; 
    String s1, msg, se_id, se_name; 
    ListView list; 
    ArrayList<String> arrayList = new ArrayList<>(); 
    ArrayAdapter<String> arrayAdapter; 
    JSONParser jsonParser=new JSONParser(); 
    JSONArray pro; 
    URL url = new URL(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_selist); 
     sup_id=getIntent().getExtras().getInt("sup_id"); 
     list= (ListView) findViewById(R.id.list_se); 
     new DataReceive().execute(); 

    } 
    public class DataReceive extends AsyncTask<String, String, String> { 

     ProgressDialog progressDialog = new ProgressDialog(SEList.this); 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 

      progressDialog.setMessage("Please wait..."); 
      progressDialog.setCancelable(false); 
      progressDialog.show(); 
     } 

     @Override 
     protected String doInBackground(String... params) { 
      try{ 
       List<NameValuePair> pairlist = new ArrayList<NameValuePair>(); 
       s1=Integer.toString(sup_id); 
       pairlist.add(new BasicNameValuePair("supervisor_id", s1)); 
       JSONObject jsonObject=jsonParser.makeHttpRequest(url.RECEIVE_SENAME,"POST",pairlist); 
       val=jsonObject.getInt("val"); 
       msg=jsonObject.getString("msg"); 
       //id1=jsonObject.getInt("id"); 
       pro=jsonObject.getJSONArray("information"); 

       for(int i=0; i<pro.length(); i++) { 
        JSONObject jo = pro.getJSONObject(i); 
        se_id = jo.getString("se_id"); 
        se_name = jo.getString("se_name"); 

        arrayList.add(se_name); 
       } 

      }catch (Exception e){ 

      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(String s) { 

      super.onPostExecute(s); 
      progressDialog.dismiss(); 
      if(val==1){ 
       Toast.makeText(getApplicationContext(),msg,Toast.LENGTH_SHORT).show(); 
       arrayAdapter=new ArrayAdapter<String>(getApplicationContext(),android.R.layout.simple_list_item_1,arrayList); 
       list.setAdapter(arrayAdapter); 
       list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
        @Override 
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
         String se = (String) parent.getItemAtPosition(position); 
         Intent intent = new Intent(SEList.this, ChooseOptionSE.class); 
         intent.putExtra("se_id",se_id); 
         startActivity(intent); 

        } 
       }); 

      } 
      else{ 

       Toast.makeText(getApplicationContext(),msg,Toast.LENGTH_SHORT).show(); 

      } 
     } 
    } 
} 
+0

不知道什么最终目标是在这里,但它看起来像你只添加'se_name'到ArrayList和永不加'se_id'。这是你想要做的吗? – Mackattack

+0

你并没有将你的'se_id'存储到任何地方,所以你不能直接获取它。首先,您需要将其存储在某个数组中或创建您自己的“模型”类。使用它,并从他们的身份证。 – Shailesh

+0

目标是将所选项目的se_name和se_id发送到其他活动。我已经使用onItemClick(),以便可以知道所选项目的se_id和se_name,但我不确定如何使用它来获取所选项目的se_id和se_name的值。你能帮我解决吗?而且我不会添加se_id,因为我不想将id显示给用户,只会显示名称。 – Israt

回答

0

您可以将这些ID存储在spe Array ArrayList中或创建一个具有Id和Name的自定义对象。 然后你可以使用,如果1:

String se = (String) parent.getItemAtPosition(position); 
se_id = idsList.get(position); 
Intent intent = new Intent(SEList.this, ChooseOptionSE.class); 
intent.putExtra("se_id",se_id); 
startActivity(intent); 

的情况下,2:

CustomType obj =((CustomAdapter)customAdapter).getAdapter().getItemAt(position); 
String se_name = obj.getName(); 
int se_id = obj.getId(); 
0

而不是使用ArrayLisy<String>,你可以用ArrayList<CustomObject>实现这一目标,创建自定义类这样toString()会帮助你在列表中显示该项目。

注意:如果你让你的CustomObject为Serializable或者Parcelable,你 可以直接对象发送到另一个活动

class CustomObject { 
    String name; 
    String id; 

    @Override 
    public String toString() { 
     return name; 
    } 
} 

的onclick监听器,你可以这样做,

@Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     CustomObject se = (CustomObject) arrayList.get(position) ; 
     Intent intent = new Intent(SEList.this, ChooseOptionSE.class); 
     intent.putExtra("se_id",se.id); 
     intent.putExtra("se_name",se.name); 


     startActivity(intent); 

    } 
0

试试这个。

拿彼此的ArrayList的ID存储

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

现在存储你的ID在arrayIdList

try{ 
      List<NameValuePair> pairlist = new ArrayList<NameValuePair>(); 
      arrayIdList = new ArrayList<String>(); 

      for(int i=0; i<pro.length(); i++) { 
       JSONObject jo = pro.getJSONObject(i); 
       se_id = jo.getString("se_id"); 
       se_name = jo.getString("se_name"); 

       arrayList.add(se_name); 
       arrayIdList.add(se_id); 
      } 

     }catch (Exception e){ 

     } 

现在做的这样获得的ID,并传递给另一个活动

public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

    String se_id = ""; 
    for(int i = 0; i < arrayIdList.size(); i++) 
    { 
     if(position == i){ 
      se_id = arrayIdList.get(i); 
      break; 
     } 
    } 

    Log.i("se_is = ", ""+ se_id); 
    if(se_id != null){ 
     String se = (String) parent.getItemAtPosition(position); 
     Intent intent = new Intent(SEList.this, ChooseOptionSE.class); 
     intent.putExtra("se_id",se_id); 
     startActivity(intent); 
    } 
} 

但正如我在没有很好的方式告诉你,这做。请了解CustomAdapter

0

首先,您应该创建一个模型类。并将您的se_id和se_name设置为它。

public class Model { 
String name; 
String id; 
public String getId() { 
    return id; 
} 

public void setId(String id) { 
    this.id = id; 
} 




public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 
} 

,并在你的主类

public class SEList extends AppCompatActivity { 

int sup_id, val; 
String s1, msg, se_id, se_name; 
ListView list; 
List<Model> arrayList = new ArrayList<>(); 
ArrayAdapter<String> arrayAdapter; 
JSONParser jsonParser=new JSONParser(); 
JSONArray pro; 
URL url = new URL(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_selist); 
    sup_id=getIntent().getExtras().getInt("sup_id"); 
    list= (ListView) findViewById(R.id.list_se); 
    new DataReceive().execute(); 

} 
public class DataReceive extends AsyncTask<String, String, String> { 

    ProgressDialog progressDialog = new ProgressDialog(SEList.this); 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 

     progressDialog.setMessage("Please wait..."); 
     progressDialog.setCancelable(false); 
     progressDialog.show(); 
    } 

    @Override 
    protected String doInBackground(String... params) { 
     try{ 
      List<NameValuePair> pairlist = new ArrayList<NameValuePair>(); 
      s1=Integer.toString(sup_id); 
      pairlist.add(new BasicNameValuePair("supervisor_id", s1)); 
      JSONObject jsonObject=jsonParser.makeHttpRequest(url.RECEIVE_SENAME,"POST",pairlist); 
      val=jsonObject.getInt("val"); 
      msg=jsonObject.getString("msg"); 
      //id1=jsonObject.getInt("id"); 
      pro=jsonObject.getJSONArray("information"); 

      for(int i=0; i<pro.length(); i++) { 
       JSONObject jo = pro.getJSONObject(i); 
       Model model = new Model(); 
       se_id = jo.getString("se_id"); 
       se_name = jo.getString("se_name"); 

       model.setId(se_id); 
       model.setName(se_name); 


       arrayList.add(model); 
      } 

     }catch (Exception e){ 

     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(String s) { 

     super.onPostExecute(s); 
     progressDialog.dismiss(); 
     if(val==1){ 
      Toast.makeText(getApplicationContext(),msg,Toast.LENGTH_SHORT).show(); 

      CustomAdapter adapter = new CustomAdapter(arrayList,SEList.this) 
      list.setAdapter(adapter); 

       list.setOnItemClickListener(new OnItemClickListener() { 
         
                    @Override 
       public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
        //String se = (String) parent.getItemAtPosition(position); 
        Model model = arrayList.get(position); 
        Intent intent = new Intent(SEList.this, ChooseOptionSE.class); 
        intent.putExtra("se_id", model.getId); 
        startActivity(intent); 

       } 
      }); 

     } 
     else{ 

      Toast.makeText(getApplicationContext(),msg,Toast.LENGTH_SHORT).show(); 

     } 
    } 
} 

您应该创建列表视图设置一个CustomAdapter类。

public class CustomAdapter extends ArrayAdapter<Model> { 

private List<Model> dataSet; 
Context mContext; 

// View lookup cache 
private static class ViewHolder { 
    TextView txtName; 

} 

public CustomAdapter(ArrayList<Model> data, Context context) { 
    super(context, R.layout.row_item, data); // Create a layout xml file with one text view 
    this.dataSet = data; 
    this.mContext=context; 

} 
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    // Get the data item for this position 
    Model dataModel = getItem(position); 
    // Check if an existing view is being reused, otherwise inflate the view 
    ViewHolder viewHolder; // view lookup cache stored in tag 

    final View result; 

    if (convertView == null) { 

     viewHolder = new ViewHolder(); 
     LayoutInflater inflater = LayoutInflater.from(getContext()); 
     convertView = inflater.inflate(R.layout.row_item, parent, false); 
     viewHolder.txtName = (TextView) convertView.findViewById(R.id.name); 

     result=convertView; 

     convertView.setTag(viewHolder); 
    } else { 
     viewHolder = (ViewHolder) convertView.getTag(); 
     result=convertView; 
    } 

    viewHolder.txtName.setText(dataModel.getName()); 

    // Return the completed view to render on screen 
    return convertView; 
} 
} 
相关问题