Je reçois une erreur lorsque j'essaie de configurer mon affichage pour afficher la variable ListView
du fichier que je souhaite afficher (fichier texte). Je suis sûr que cela a quelque chose à voir avec le XML. Je veux juste afficher les informations de this.file = fileop.ReadFileAsList("Installed_packages.txt");
. Mon code:
public class Main extends Activity {
private TextView tv;
private FileOperations fileop;
private String[] file;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.fileop = new FileOperations();
this.file = fileop.ReadFileAsList("Installed_packages.txt");
setContentView(R.layout.main);
tv = (TextView) findViewById(R.id.TextView01);
ListView lv = new ListView(this);
lv.setTextFilterEnabled(true);
lv.setAdapter(new ArrayAdapter<String>(this, R.layout.list_item, this.file));
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// When clicked, show a toast with the TextView text
Toast.makeText(getApplicationContext(), ((TextView) view).getText(), Toast.LENGTH_SHORT).show();
}
});
setContentView(lv);
}
}
list_item.xml :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:orientation="vertical"
Android:padding="10dp"
Android:textSize="16sp"
Android:textColor="#000">
</LinearLayout>
main.xml :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:weightSum="1">
<ScrollView
Android:id="@+id/SCROLLER_ID"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:scrollbars="vertical"
Android:fillViewport="true">
<TextView
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:padding="5sp"
Android:id="@+id/TextView01"
Android:text="@string/hello"/>
</ScrollView>
</LinearLayout>
ArrayAdapter requiert que l'ID de ressource soit une exception TextView XML, ce qui signifie que vous ne fournissez pas ce que la variable ArrayAdapter
attend. Lorsque vous utilisez ce constructeur:
new ArrayAdapter<String>(this, R.layout.a_layout_file, this.file)
R.Layout.a_layout_file
doit être l'id d'un fichier de présentation XML contenant uniquement une TextView
(la TextView
ne peut pas être entourée par une autre présentation, comme une LinearLayout
, RelativeLayout
etc!), quelque chose comme ceci:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
// other attributes of the TextView
/>
Si vous souhaitez que la disposition de vos lignes de liste soit quelque peu différente, un simple widget TextView
utilise ce constructeur:
new ArrayAdapter<String>(this, R.layout.a_layout_file,
R.id.the_id_of_a_textview_from_the_layout, this.file)
où vous fournissez la id
d'une disposition pouvant contenir différentes vues, mais aussi must contenant une TextView
avec et id
(le troisième paramètre) que vous transmettez à votre ArrayAdapter
pour qu'il sache où placer la Strings
disposition.
La solution est là
listitem.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical" >
<TextView
Android:id="@+id/textview"
Android:layout_width="match_parent"
Android:layout_height="match_parent" >
</TextView>
</LinearLayout>
Code Java:
String[] countryArray = {"India", "Pakistan", "USA", "UK"};
ArrayAdapter adapter = new ArrayAdapter<String>(this, R.layout.listitem,R.id.textview, countryArray);
ListView listView = (ListView) findViewById(R.id.listview);
listView.setAdapter(adapter);
Si vous recevez ce message lorsque vous étendez un ArrayAdapter, vous obtenez cette erreur car vous n'avez pas fourni l'ID de ressource correct pour afficher l'élément. Appelez la super classe du constructeur et transmettez l'ID de la ressource TextView:
//Pass in the resource id: R.id.text_view
SpinnerAdapter spinnerAddToListAdapter = new SpinnerAdapter(MyActivity.this,
R.id.text_view,
new ArrayList<>());
Adaptateur:
public class SpinnerAdapter extends ArrayAdapter<MyEntity> {
private Context context;
private List<MyEntity> values;
public SpinnerAdapter(Context context, int textViewResourceId,
List<MyEntity> values) {
//Pass in the resource id: R.id.text_view
super(context, textViewResourceId, values);
this.context = context;
this.values = values;
}