Reputation: 379
Too many times asked but I can't find the issue in my own code.
As others, I have a one ArrayList and i need to display it.
The problem is that ListView isn't visible when activity get launched, I don't know why.
Here is my code:
layout: activity_dashboard_screen.xml
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/ly_dashboard"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.ciroreed.war_horizon.ui.Dashboard_screen" >
<TextView
android:id="@+id/tv_dashboard_display_username"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="username"
tools:ignore="HardcodedText" />
<TableRow
android:id="@+id/row_dashboard_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="end" >
</TableRow>
<TableRow
android:id="@+id/row_dashboard_2"
android:layout_width="fill_parent"
android:layout_height="match_parent" >
<ListView
android:id="@+id/lv_dashboard_matchlist"
android:layout_width="fill_parent"
android:layout_height="match_parent" />
</TableRow>
Custom class that extends BaseAdapter: MatchAdapter.java
package com.ciroreed.war_horizon;
import java.util.ArrayList;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import android.widget.TwoLineListItem;
import com.ciroreed.war_horizon.data.Match;
public class MatchAdapter extends BaseAdapter {
private Context con;
private ArrayList<Match> MATCHLIST;
public MatchAdapter(Context appcontext, ArrayList<Match> matchlist){
con = appcontext;
MATCHLIST = matchlist;
}
..............
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TwoLineListItem tll;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) con
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
tll = (TwoLineListItem) inflater.inflate(
android.R.layout.simple_list_item_2, parent);
} else {
tll = (TwoLineListItem) convertView;
}
TextView text1 = tll.getText1();
TextView text2 = tll.getText2();
text1.setText("VS "+MATCHLIST.get(position).getEnemy_name());
text2.setText("turno: "+MATCHLIST.get(position).isPlayerTurn());
return tll;
}
}
And here is the activity when may run it:
package com.ciroreed.war_horizon.ui;
import java.util.concurrent.ExecutionException;
import org.json.JSONException;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.ciroreed.war_horizon.Controller;
import com.ciroreed.war_horizon.MatchAdapter;
import com.ciroreed.war_horizon.R;
public class Dashboard_screen extends Activity implements OnClickListener{
private TextView tv_dashboard_username;
private ListView lv_dashboard_matchlist;
private MatchAdapter MATCHLIST_adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dashboard_screen);
init();
}
private void init() {
// TODO Auto-generated method stub
tv_dashboard_username = (TextView)findViewById(R.id.tv_dashboard_display_username);
lv_dashboard_matchlist = (ListView)findViewById(R.id.lv_dashboard_matchlist);
try {
if(Controller.getCurrentMatches()){
MATCHLIST_adapter = new MatchAdapter(getApplicationContext(), Controller.MATCHLIST);
Toast.makeText(getApplicationContext(), "Partidas cargadas correctamente", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(getApplicationContext(), "Error al cargar las partidas", Toast.LENGTH_SHORT).show();
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
MATCHLIST_adapter.notifyDataSetChanged();
lv_dashboard_matchlist.setAdapter(MATCHLIST_adapter);
}
When I execute, .. well, this is NOT the main activity. It runs as expected but and the ArrayList<Match>
contains one element (at least)..
Please don't ask about how the previous code works like "Controller.getCurrentMatches()" IE that method gets a json with data from a remote server, excepts the code relative to the ListAdapter everything else was tested before and works fine.
Upvotes: 0
Views: 423
Reputation: 379
From http://www.vogella.com/tutorials/AndroidListView/article.html
Chapter: 13. Tutorial: How to display two items in a ListView
package de.vogella.android.listactivity;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import android.app.ListActivity;
import android.os.Bundle;
import android.widget.SimpleAdapter;
public class MyTwoListItemsActivity extends ListActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ArrayList<Map<String, String>> list = buildData();
String[] from = { "name", "purpose" };
int[] to = { android.R.id.text1, android.R.id.text2 };
SimpleAdapter adapter = new SimpleAdapter(this, list,
android.R.layout.simple_list_item_2, from, to);
setListAdapter(adapter);
}
private ArrayList<Map<String, String>> buildData() {
ArrayList<Map<String, String>> list = new ArrayList<Map<String, String>>();
list.add(putData("Android", "Mobile"));
list.add(putData("Windows7", "Windows7"));
list.add(putData("iPhone", "iPhone"));
return list;
}
private HashMap<String, String> putData(String name, String purpose) {
HashMap<String, String> item = new HashMap<String, String>();
item.put("name", name);
item.put("purpose", purpose);
return item;
}
}
This isn't the accurate response to this issue, but it solved my problem.
Upvotes: 0
Reputation: 3761
What did you do in getCount()
of your adapter?
You should return a value > 0 in getCount()
Upvotes: 1