现在我想使用 ArrayAdapter 将列表视图的特定数据表单显示到另一个列表视图中
Posted
技术标签:
【中文标题】现在我想使用 ArrayAdapter 将列表视图的特定数据表单显示到另一个列表视图中【英文标题】:Now i want to display the specific data form that listview into another listview using the ArrayAdapter 【发布时间】:2019-02-14 01:44:10 【问题描述】:String url = "http://example.com/bilal/fetchparty.php";
StringRequest sr = new StringRequest(1, url, new Response.Listener<String>()
@Override
public void onResponse(String response)
try
JSONObject jo = new JSONObject(response);
JSONArray ja = jo.getJSONArray("data");
cid = new String[ja.length()];
cname = new String[ja.length()];
username = new String[ja.length()];
name1 = new String[ja.length()]; //for size
timetaken = new String[ja.length()];
link = new String[ja.length()];
ArrayList<HashMap<String, String>> arrayList = new ArrayList<>();
for (int i = 0; i < ja.length(); i++)
JSONObject job = ja.getJSONObject(i);
cid[i] = job.getString("cid");
cname[i] = job.getString("cname");
username[i] = job.getString("username");
timetaken[i] = job.getString("timetaken");
link[i] = job.getString("link");
if (cid[i].equals(shared1.sp1.getString("pid", null)) && cname[i].equals(shared1.sp1.getString("title", null)))
HashMap<String, String> hashMap = new HashMap<>();
hashMap.put("cid", cid[i]);
hashMap.put("cname", cname[i]);
hashMap.put("username", username[i]);
hashMap.put("timetaken", timetaken[i]);
hashMap.put("link", link[i]);
arrayList.add(hashMap);
Toast.makeText(Vote.this, username[i], Toast.LENGTH_SHORT).show();
nameCall (username);
String[] from = "username", "timetaken", "link";
int[] to = R.id.tvUsername, R.id.tvTime, R.id.tvLink;
SimpleAdapter sa = new SimpleAdapter(Vote.this, arrayList, R.layout.vote, from, to);
lvVote.setAdapter(sa);
catch (JSONException e)
e.printStackTrace();
, new Response.ErrorListener()
@Override
public void onErrorResponse(VolleyError error)
);
RequestQueue requestQueue = Volley.newRequestQueue(Vote.this);
requestQueue.add(sr);
lvVote.setOnItemClickListener(new AdapterView.OnItemClickListener()
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
bi = link[position];
Toast.makeText(Vote.this, bi, Toast.LENGTH_SHORT).show();
);
private void nameCall(final String name[])
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_single_choice, name);
lvVoteNow.setAdapter(adapter);
bVoteSubmit.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
int p;
String s;
p = lvVoteNow.getCheckedItemPosition();
if (p != ListView.INVALID_POSITION)
s = name[p];
Toast.makeText(Vote.this, "You voted for " + s, Toast.LENGTH_SHORT).show();
//use s here
s = null;
else
Toast.makeText(Vote.this, "Please Give Your Vote", Toast.LENGTH_SHORT).show();
);
我从在线服务器获取数据并使用 simpleAdapter 将数据显示到 ListView 中。现在我想使用 ArrayAdapter 将 Listview 的特定数据表单显示到另一个 Listview 中 但它不根据第二个 ListView 中的 if 条件显示整个列表,即 lvVoteNow
【问题讨论】:
【参考方案1】:这是我的代码
public class Vote extends AppCompatActivity
ListView lvVote,lvVoteNow;
TextView tvUsername,tvTime,tvLink,cidVote,cnameVote;
List<String> testUserName = new ArrayList<>();
Button bVoteSubmit;
String bi;
String [] cid,cname,username,timetaken,link,name1,name2;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_vote);
lvVoteNow = findViewById(R.id.lvVoteNow);
bVoteSubmit = findViewById(R.id.bVoteSubmit);
tvUsername = findViewById(R.id.tvUsername);
tvTime = findViewById(R.id.tvTime);
tvLink = findViewById(R.id.tvLink);
cidVote = findViewById(R.id.cidVote);
cnameVote = findViewById(R.id.cnameVote);
lvVote = findViewById(R.id.lvVote);
lvVote.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
final Shared shared1 = new Shared(getApplicationContext());
cidVote.setText(shared1.sp1.getString("pid", null));
cnameVote.setText(shared1.sp1.getString("title", null));
//fetching data for vote
String url = "http://example.com/bilal/fetchparty.php";
StringRequest sr = new StringRequest(1, url, new Response.Listener<String>()
@Override
public void onResponse(String response)
try
JSONObject jo = new JSONObject(response);
JSONArray ja = jo.getJSONArray("data");
cid = new String[ja.length()];
cname = new String[ja.length()];
username = new String[ja.length()];
name1 = new String[ja.length()]; //for size
timetaken = new String[ja.length()];
link = new String[ja.length()];
ArrayList<HashMap<String, String>> arrayList = new ArrayList<>();
for (int i = 0; i < ja.length(); i++)
JSONObject job = ja.getJSONObject(i);
cid[i] = job.getString("cid");
cname[i] = job.getString("cname");
username[i] = job.getString("username");
timetaken[i] = job.getString("timetaken");
link[i] = job.getString("link");
if (cid[i].equals(shared1.sp1.getString("pid", null)) && cname[i].equals(shared1.sp1.getString("title", null)))
HashMap<String, String> hashMap = new HashMap<>();
hashMap.put("cid", cid[i]);
hashMap.put("cname", cname[i]);
hashMap.put("username", username[i]);
hashMap.put("timetaken", timetaken[i]);
hashMap.put("link", link[i]);
arrayList.add(hashMap);
Toast.makeText(Vote.this, username[i], Toast.LENGTH_SHORT).show();
testUserName.add(username[i]); // add userName to list
// nameCall (username);
//after all specific users add on list to this
String[] stringArray = testUserName.toArray(new String[0]);
nameCall(stringArray);
String[] from = "username", "timetaken", "link";
int[] to = R.id.tvUsername, R.id.tvTime, R.id.tvLink;
SimpleAdapter sa = new SimpleAdapter(Vote.this, arrayList, R.layout.vote, from, to);
lvVote.setAdapter(sa);
catch (JSONException e)
e.printStackTrace();
, new Response.ErrorListener()
@Override
public void onErrorResponse(VolleyError error)
);
RequestQueue requestQueue = Volley.newRequestQueue(Vote.this);
requestQueue.add(sr);
lvVote.setOnItemClickListener(new AdapterView.OnItemClickListener()
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
bi = link[position];
Toast.makeText(Vote.this, bi, Toast.LENGTH_SHORT).show();
);
private void nameCall(final String name[])
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_single_choice, name);
lvVoteNow.setAdapter(adapter);
bVoteSubmit.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
int p;
String s;
p = lvVoteNow.getCheckedItemPosition();
if (p != ListView.INVALID_POSITION)
s = name[p];
Toast.makeText(Vote.this, "You voted for " + s, Toast.LENGTH_SHORT).show();
//use s here
s = null;
else
Toast.makeText(Vote.this, "Please Give Your Vote", Toast.LENGTH_SHORT).show();
);
【讨论】:
在 testUserName(username[i]) 中显示错误;说方法调用预期以上是关于现在我想使用 ArrayAdapter 将列表视图的特定数据表单显示到另一个列表视图中的主要内容,如果未能解决你的问题,请参考以下文章
列表视图中的 csv 和复选框将选中的复选框代码保存在 ArrayAdapter 中
带有 ArrayAdapter 的 ListView 未在 Android 11 上显示内容