искали listview OnClick not рабочие страницы, не решает.
my Activity заполняет список, вызывая собственный адаптер MyArrayAddapter, который расширяет класс ArrayAdapter.
Проблема: onItemClick() или setOnItemClick() не отвечают.
когда я нажимаю на любой из элементов, никаких действий не происходит, даже операторы журнала не выполняются.
<<>>
фрагмент кода:
В моем классе, который расширяет Activity, реализует OnItemClickListener, я инициализирую и вызываю следующие функции в методе OnCreate():
private void listViewSet() {
MyArrayAdapter adapter = new MyArrayAdapter( this, R.id.tvrow, rootListWrapper );
// Assign adapter to ListView
listView.setAdapter( adapter );
listView.setOnItemClickListener( this ); //******
listView.performClick();
}
Даже тосты не появляются :(
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
Log.v( "OnCLick", "asdfhjdf" );
Toast.makeText( this, "Component "+ rootListWrapper.get( position ).toString() + " clicked.", Toast.LENGTH_LONG ).show();
root = rootListWrapper.get( position );
rootListWrapper = root.children;
this.listViewSet();
}
Примечание: когда я нажимаю на элемент списка, я получаю точно такие же сообщения, отличающиеся только отметкой времени. Я получаю 7-8 таких новых сообщений. LogCat перед кликом:
03-15 09:54:06.507: W/Trace(1825): Unexpected value from nativeGetEnabledTags: 0
03-15 09:54:06.877: W/Trace(1825): Unexpected value from nativeGetEnabledTags: 0
03-15 09:54:06.877: W/Trace(1825): Unexpected value from nativeGetEnabledTags: 0
03-15 09:54:06.947: W/Trace(1825): Unexpected value from nativeGetEnabledTags: 0
03-15 09:54:06.947: W/Trace(1825): Unexpected value from nativeGetEnabledTags: 0
03-15 09:54:07.117: W/Trace(1825): Unexpected value from nativeGetEnabledTags: 0
03-15 09:54:07.117: W/Trace(1825): Unexpected value from nativeGetEnabledTags: 0
03-15 09:54:07.297: W/Trace(1825): Unexpected value from nativeGetEnabledTags: 0
после клика:
03-15 10:05:36.458: W/Trace(1825): Unexpected value from nativeGetEnabledTags: 0
03-15 10:05:36.458: W/Trace(1825): Unexpected value from nativeGetEnabledTags: 0
03-15 10:05:36.480: W/Trace(1825): Unexpected value from nativeGetEnabledTags: 0
03-15 10:05:40.817: W/Trace(1825): Unexpected value from nativeGetEnabledTags: 0
03-15 10:05:40.817: W/Trace(1825): Unexpected value from nativeGetEnabledTags: 0
03-15 10:05:40.917: W/Trace(1825): Unexpected value from nativeGetEnabledTags: 0
03-15 10:05:40.960: W/Trace(1825): Unexpected value from nativeGetEnabledTags: 0
Схема мероприятия:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".BigClass" >
<ListView
android:id="@+id/mylist"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>
</RelativeLayout>
макет для элементов строки:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="20dp"
>
<TextView android:id="@+id/tvrow"
android:layout_width="fill_parent"
android:layout_height="wrap_content" android:text="Component" />
<LinearLayout android:weightSum="9" android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/tvrow" >
<Button android:id="@+id/bL"
android:layout_weight="4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/blue_right"
/>
<Button
android:id="@+id/bC
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/component2"
/>
<Button
android:layout_weight="4"
android:id="@+id/bR"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/blue_right"
/>
</LinearLayout>
</RelativeLayout>
Он идеально заполняется в первый раз, но я хочу, чтобы при нажатии я мог повторно заполнить его, изменив параметры и снова вызвав метод setAdapter().
Решение этого наверняка поможет многим другим, так как я вижу, что у многих есть неразрешенные сомнения.
java-файл для рассматриваемого класса:
public class BigClass extends Activity implements OnItemClickListener{
List<Node> rootListWrapper;
Node root;
ListView listView;
GetMethodEx getJSONString;
JSONObject jObject;
BigClass HealthNext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_health_display);
listView = (ListView) findViewById(R.id.mylist);
rootListWrapper = new ArrayList<Node>();
root = new Node();
getJSONString = new GetMethodEx();
jObject = new JSONObject();
//values = new String[] { "Android", "iPhone", "WindowsMobile",
// "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
// "Linux", "OS/2" };
this.jsonDataFetch();
this.listViewSet();
}
private void jsonDataFetch() {
// TODO Auto-generated method stub
try{
jObject=new JSONObject( getJSONString.getInternetData() );
root = root.createNode( jObject );
Log.v( "component", jObject.getString("status") );
rootListWrapper.add( root );
}catch(Exception e){
e.printStackTrace();
}
Log.v("component", rootListWrapper.toString());
}
private void listViewSet() {
// Define a new Adapter
// First parameter - Context
// Second parameter - Layout for the row
// Third parameter - ID of the TextView to which the data is written
// Fourth - the Array of data
MyArrayAdapter adapter = new MyArrayAdapter( this, R.id.tvrow, rootListWrapper );
// Assign adapter to ListView
listView.setAdapter( adapter );
listView.setOnItemClickListener( this );
listView.performClick();
}
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
Log.v( "OnCLick", "asdfhjdf" );
Toast.makeText( BigClass.this, "Component "+ rootListWrapper.get( position ).toString() + " clicked.", Toast.LENGTH_LONG ).show();
root = rootListWrapper.get( position );
rootListWrapper = root.children;
HealthNext.jsonDataFetch();
HealthNext.listViewSet();
}
}
Обновлен LOGCAT: после использования атрибута focusable:false на 3 кнопках.
03-15 10:57:44.798: V/OnCLick(958): asdfhjdf
03-15 10:57:44.952: D/AndroidRuntime(958): Shutting down VM
03-15 10:57:44.952: W/dalvikvm(958): threadid=1: thread exiting with uncaught exception (group=0x40a70930)
03-15 10:57:44.992: E/AndroidRuntime(958): FATAL EXCEPTION: main
03-15 10:57:44.992: E/AndroidRuntime(958): java.lang.NullPointerException
03-15 10:57:44.992: E/AndroidRuntime(958): at com.example.@@@@@@.BigClass.onItemClick(BigClass.java:86)
03-15 10:57:44.992: E/AndroidRuntime(958): at android.widget.AdapterView.performItemClick(AdapterView.java:298)
03-15 10:57:44.992: E/AndroidRuntime(958): at android.widget.AbsListView.performItemClick(AbsListView.java:1100)
03-15 10:57:44.992: E/AndroidRuntime(958): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2749)
03-15 10:57:44.992: E/AndroidRuntime(958): at android.widget.AbsListView$1.run(AbsListView.java:3423)
03-15 10:57:44.992: E/AndroidRuntime(958): at android.os.Handler.handleCallback(Handler.java:725)
03-15 10:57:44.992: E/AndroidRuntime(958): at android.os.Handler.dispatchMessage(Handler.java:92)
03-15 10:57:44.992: E/AndroidRuntime(958): at android.os.Looper.loop(Looper.java:137)
03-15 10:57:44.992: E/AndroidRuntime(958): at android.app.ActivityThread.main(ActivityThread.java:5039)
03-15 10:57:44.992: E/AndroidRuntime(958): at java.lang.reflect.Method.invokeNative(Native Method)
03-15 10:57:44.992: E/AndroidRuntime(958): at java.lang.reflect.Method.invoke(Method.java:511)
03-15 10:57:44.992: E/AndroidRuntime(958): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
03-15 10:57:44.992: E/AndroidRuntime(958): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
03-15 10:57:44.992: E/AndroidRuntime(958): at dalvik.system.NativeStart.main(Native Method)