To have a colorful ListView I have created my own ArrayAdapter, but when I want to use adapter.clear()
or adapter.add()
it gives me errors. Here is the code and errors.
XML file:
<ListView
android:id="@+id/android:list"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:padding="10dip"
android:layout_margin="4dip"
android:layout_weight="1">
</ListView>
Adapter:
class stableArrayAdapter extends ArrayAdapter<String> {
HashMap<String, Integer> mIdMap = new HashMap<String, Integer>();
public stableArrayAdapter(Context context, int textViewResourceId, String [] objects)
{
super(context, textViewResourceId, objects);
for (int i = 0; i < objects.length; ++i) {
mIdMap.put(objects[i], i);
}
}
@Override
public long getItemId(int position) {
String item = getItem(position);
return mIdMap.get(item);
}
@Override
public boolean hasStableIds() {
return true;
}
}
Java code:
public class createtarget extends ListActivity
{
stableArrayAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.createtarget);
lstView = getListView();
lstView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
lstView.setTextFilterEnabled(true);
Target=new String []{""};
adapter = new stableArrayAdapter(this,android.R.layout.simple_list_item_checked, Target);
setListAdapter(adapter);
}
}
Add code:
public void submit(View view)
{
adapter.add("Hello");
}
Errors:
06-08 05:21:11.785: E/AndroidRuntime(3584): FATAL EXCEPTION: main
06-08 05:21:11.785: E/AndroidRuntime(3584): java.lang.IllegalStateException: Could not execute method of the activity
06-08 05:21:11.785: E/AndroidRuntime(3584): at android.view.View$1.onClick(View.java:3599)
06-08 05:21:11.785: E/AndroidRuntime(3584): at android.view.View.performClick(View.java:4204)
06-08 05:21:11.785: E/AndroidRuntime(3584): at android.view.View$PerformClick.run(View.java:17355)
06-08 05:21:11.785: E/AndroidRuntime(3584): at android.os.Handler.handleCallback(Handler.java:725)
06-08 05:21:11.785: E/AndroidRuntime(3584): at android.os.Handler.dispatchMessage(Handler.java:92)
06-08 05:21:11.785: E/AndroidRuntime(3584): at android.os.Looper.loop(Looper.java:137)
06-08 05:21:11.785: E/AndroidRuntime(3584): at android.app.ActivityThread.main(ActivityThread.java:5041)
06-08 05:21:11.785: E/AndroidRuntime(3584): at java.lang.reflect.Method.invokeNative(Native Method)
06-08 05:21:11.785: E/AndroidRuntime(3584): at java.lang.reflect.Method.invoke(Method.java:511)
06-08 05:21:11.785: E/AndroidRuntime(3584): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
06-08 05:21:11.785: E/AndroidRuntime(3584): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
06-08 05:21:11.785: E/AndroidRuntime(3584): at dalvik.system.NativeStart.main(Native Method)
06-08 05:21:11.785: E/AndroidRuntime(3584): Caused by: java.lang.reflect.InvocationTargetException
06-08 05:21:11.785: E/AndroidRuntime(3584): at java.lang.reflect.Method.invokeNative(Native Method)
06-08 05:21:11.785: E/AndroidRuntime(3584): at java.lang.reflect.Method.invoke(Method.java:511)
06-08 05:21:11.785: E/AndroidRuntime(3584): at android.view.View$1.onClick(View.java:3594)
06-08 05:21:11.785: E/AndroidRuntime(3584): ... 11 more
06-08 05:21:11.785: E/AndroidRuntime(3584): Caused by: java.lang.UnsupportedOperationException
06-08 05:21:11.785: E/AndroidRuntime(3584): at java.util.AbstractList.add(AbstractList.java:404)
06-08 05:21:11.785: E/AndroidRuntime(3584): at java.util.AbstractList.add(AbstractList.java:425)
06-08 05:21:11.785: E/AndroidRuntime(3584): at android.widget.ArrayAdapter.add(ArrayAdapter.java:179)
06-08 05:21:11.785: E/AndroidRuntime(3584): at net.learn2develop.UsingIntent.createtarget.submit(createtarget.java:136)
06-08 05:21:11.785: E/AndroidRuntime(3584): ... 14 more
06-08 05:21:16.206: E/Trace(3614): error opening trace file: No such file or directory (2)
Try the below. have a arraylist. add string to arraylist and call notifiydatasetchanged() on your adapter
public class MainActivity extends ListActivity
{
stableArrayAdapter adapter;
ListView lstView;
ArrayList<String> Target = new ArrayList<String>();
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
lstView = getListView();
lstView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
lstView.setTextFilterEnabled(true);
Target.add("hi");
Target.add("hello");
adapter = new stableArrayAdapter(this,android.R.layout.simple_list_item_checked, Target);
setListAdapter(adapter);
Target.add("myname");
adapter.notifyDataSetChanged();
}
class stableArrayAdapter extends ArrayAdapter<String> {
public stableArrayAdapter(Context context, int textViewResourceId, ArrayList<String> target)
{
super(context, textViewResourceId, target);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return Target.size();
}
@Override
public String getItem(int position) {
// TODO Auto-generated method stub
return Target.get(position);
}
@Override
public int getPosition(String item) {
// TODO Auto-generated method stub
return super.getPosition(item);
}
@Override
public boolean hasStableIds() {
return true;
}
}
}
As ken suggested.
public class MainActivity extends ListActivity
{
ListView lstView;
ArrayList<String> Target = new ArrayList<String>();
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
lstView = getListView();
lstView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
lstView.setTextFilterEnabled(true);
Target.add("hi");
Target.add("hello");
;
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_checked, Target);
setListAdapter(adapter);
Target.add("myname");
adapter.notifyDataSetChanged();
}
}
I dont know these may help you or not..
As per my opinion You should check your xml file..
When you use getListView()
method you should declare your Object of Listview like
android:id = @android:id/list
Or
use these line with your ArrayAdpater
arrAdapt.setNotifyOnChange(true);
May these help you..
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With