Ich habe eine ListView, die einen Adapter verwendet, der ein String-Array als Argument erhält. Wenn ich mir die Listenansicht anschaue, wird 1 Element angezeigt, dann wird dahinter viel Leerzeichen angezeigt, gefolgt vom nächsten Element, wenn ich nach unten blättere. Was könnte das Problem sein? HierAndroid ListView mit einem Element pro Seite
class CustomAdapter extends ArrayAdapter<String> {
CustomAdapter(Context context, String[] camere) {
super(context, R.layout.custom_row, camere);
}
boolean parola = true;
boolean intra = true;
String player_id, room_id;
String siteul = "some_site";
String site;
HashMap<String, String> hash;
static class ViewHolder {
TextView camera;
TextView players;
TextView max_players;
ImageView privata;
Button Buton;
String room_id, nume;
}
ViewHolder ceva;
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
String variabile[] = getItem(position).split("\\s+");
if(convertView == null)
{
LayoutInflater linflater = LayoutInflater.from(getContext());
convertView = linflater.inflate(R.layout.custom_row, parent, false);
holder = new ViewHolder();
holder.camera = (TextView) convertView.findViewById(R.id.Nume);
holder.players = (TextView) convertView.findViewById(R.id.players);
holder.max_players = (TextView) convertView.findViewById(R.id.max_players);
holder.privata = (ImageView) convertView.findViewById(R.id.privata);
holder.Buton = (Button) convertView.findViewById(R.id.Buton);
holder.camera.setText(variabile[0]);
if (!variabile[1].equals("true")) {
parola = false;
holder.privata.setVisibility(View.INVISIBLE);
}
holder.players.setText(variabile[2]);
holder.max_players.setText(variabile[3]);
holder.room_id = variabile[4];
holder.nume = variabile[5];
holder.Buton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
int playeri = Integer.parseInt(holder.players.getText().toString());
int maximi = Integer.parseInt(holder.max_players.getText().toString());
if(playeri < maximi)
{
hash = new HashMap<String, String>();
hash.put("name", holder.nume);
hash.put("room", holder.room_id);
if (intra) {
holder.Buton.setText("Iesi");
site = siteul + "/join";
intra = false;
} else {
holder.Buton.setText("Intra");
site = siteul + "/leave";
intra = true;
}
new ATask((ViewHolder) v.getTag()).execute(site);
}
}
});
convertView.setTag(holder);
holder.Buton.setTag(holder);
}
else
holder = (ViewHolder) convertView.getTag();
return convertView;
}
public void CheckStart()
{
site = siteul + "/checkstart";
hash = new HashMap<String, String>();
hash.put("room", room_id);
new ATask(ceva).execute(site);
}
public void CheckPlayers()
{
site = siteul + "/checkplayers";
hash = new HashMap<String, String>();
hash.put("room", room_id);
new ATask(ceva).execute(site);
}
public void openGame(String litera)
{
Intent incercare = new Intent(getContext(), Game.class);
incercare.putExtra("nume", player_id);
incercare.putExtra("room", room_id);
incercare.putExtra("litera", litera);
incercare.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getContext().startActivity(incercare);
}
private String getPostDataString(HashMap<String, String> params) throws UnsupportedEncodingException {
StringBuilder result = new StringBuilder();
boolean first = true;
for(Map.Entry<String, String> entry : params.entrySet()){
if (first)
first = false;
else
result.append("&");
result.append(URLEncoder.encode(entry.getKey(), "UTF-8"));
result.append("=");
result.append(URLEncoder.encode(entry.getValue(), "UTF-8"));
}
return result.toString();
}
public class ATask extends AsyncTask<String, Void, String> {
String rez = "";
ViewHolder myHolder;
public ATask(ViewHolder view) {
myHolder = view;
ceva = myHolder;
room_id = myHolder.room_id;
}
@Override
protected String doInBackground(String... urls) {
//try {
try {
Log.e("rasp", site);
URL obj = new URL(site);
try {
Log.e("rasp", obj.toString());
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");
//con.setRequestProperty("User-Agent", USER_AGENT);
// For POST only - START
con.setDoOutput(true);
OutputStream os = con.getOutputStream();
os.write(getPostDataString(hash).getBytes());
os.flush();
os.close();
// For POST only - END
int responseCode = con.getResponseCode();
Log.e("rasp", "response code-ul e " + Integer.toString(responseCode));
if (responseCode == HttpURLConnection.HTTP_OK) { //success
BufferedReader in = new BufferedReader(new InputStreamReader(
con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// print result
rez = response.toString();
}
else {
Log.e("rasp", "POST request not worked");
}
} catch (IOException e) {
e.printStackTrace();
}
} catch (MalformedURLException e) {
Log.e("naspa", "E corupt!");
}
//} catch (Exception e) {
// Log.e("rasp", "aia e");
//}
return rez;
}
// onPostExecute displays the results of the AsyncTask.
@Override
protected void onPostExecute(String result) {
if (rez.charAt(0) == 'Y')
openGame(rez.substring(2));
else if (rez.charAt(0) == 'V' && !intra)
{
TextView players_mare = myHolder.players;
players_mare.setText(rez.substring(2));
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
// Do something after 1s = 1000ms
CheckStart();
}
}, 1000);
}
else if(rez.charAt(0) == 'G')
CheckPlayers();
else if(rez.charAt(0) == 'Z')
{
TextView players_mare = myHolder.players;
players_mare.setText(rez.substring(2));
}
else if (rez.charAt(0) == 'D')
{
player_id = rez.substring(2);
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
// Do something after 1s = 1000ms
CheckStart();
}
}, 400);
}
}
}
}
ist die xml von "custom_row.xml":
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/background_joc">
<ScrollView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginTop="5dp"
android:id="@+id/scrollView">
<LinearLayout
android:background="@color/grey"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:layout_marginTop="10dp"
android:layout_marginLeft="7dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Nume camera"
android:id="@+id/Nume"
android:textSize="25dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="Runde:"
android:layout_marginTop="-7dp"
android:layout_marginLeft="3dp"
android:id="@+id/textView15" />
<TextView
android:layout_marginTop="15dp"
android:layout_marginLeft="-30dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="5"
android:id="@+id/runde"
android:textSize="25dp" />
<ImageView
android:layout_marginTop="18dp"
android:layout_marginLeft="20dp"
android:background="@drawable/buton_lock"
android:layout_width="15dp"
android:layout_height="20dp"
android:id="@+id/privata" />
<TextView
android:layout_marginTop="10dp"
android:layout_marginLeft="7dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="0"
android:id="@+id/players"
android:textSize="30dp" />
<TextView
android:layout_marginTop="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="? android:attr/textAppearanceMedium"
android:text="/"
android:id="@+id/nu_trebuia_sa_aiba_id"
android:textSize="30dp" />
<TextView
android:layout_marginTop="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="5"
android:id="@+id/max_players"
android:textSize="30dp" />
<Button
android:layout_marginTop="10dp"
android:layout_width="90dp"
android:layout_height="40dp"
android:text="Intra"
android:id="@+id/Buton"
android:layout_marginLeft="5dp" />
<TextView
android:layout_marginLeft="50dp"
android:layout_marginTop="50dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text=""
android:id="@+id/e_sa_pacaleasca_match_parentu_de_la_linear_layout"
/>
</LinearLayout>
</ScrollView>
Fügen Sie die XML für 'R.layout.custom_row' hinzu –