Я пытаюсь реализовать Listview в нормальной деятельности в Android. Мне удалось показать элементы в Listview, но я не могу обнаружить щелчки

   public class homescreenjava extends AppCompatActivity {


    public void addNewFields(View view) {

        Intent callnew =new Intent(this,AddNewField.class);
        startActivity(callnew);

    }
    public void showUserInfo(View view){

        Intent callnew =new Intent(this,showuserinfo.class);
        startActivity(callnew);

    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_homescreen);
        ListView m_listview = (ListView) findViewById(R.id.list_view);

        SQLiteOpenHelper AgroDatabase = new AgroDatabase(this);
        SQLiteDatabase db = AgroDatabase.getReadableDatabase();
        Cursor cursor=db.query("fieldinfo",new String[]{"_id", "FieldName","Area"},null,null,null,null,null);
        CursorAdapter listAdapter= new SimpleCursorAdapter(this,
                                            android.R.layout.simple_list_item_1,
                                            cursor,
                                            new String[]{"FieldName"},
                                            new int[]{android.R.id.text1},0);

        m_listview.setAdapter(listAdapter);



    }


    @Override
    protected void onDestroy() {
        super.onDestroy();
        cursor.close();
        db.close();
    }
}

Iam также не в состоянии закрыть курсор и базу данных здесь на том же классе. курсор и db не могут быть решены вот сообщение об ошибке

 @Override
        protected void onDestroy() {
            super.onDestroy();
            cursor.close();
            db.close();
        }

Я прочитал, что onListItemClick может быть реализован, если мой класс расширяет listActivity
могу ли я реализовать этот метод в моем случае или есть какое-либо другое решение

public void onListItemClick(ListView listview,
                                   View itemView,
                                    int position,
                                    long id){
      Intent intent=new Intent(homescreenjava.this,SecondHome.class);
      startActivity(intent);
  }

просто для справки я помещаю свой xml-код для этого действия . listview является последним из xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    
    
    android_id="@+id/activity_homescreen"
    android_layout_width="match_parent"
    android_layout_height="wrap_content"
    android_paddingBottom="@dimen/activity_vertical_margin"
    android_paddingStart="@dimen/activity_horizontal_margin"
    android_paddingEnd="@dimen/activity_horizontal_margin"
    android_paddingTop="@dimen/activity_vertical_margin"
    android_orientation="vertical"
    tools_context="com.example.sagar.ahs.homescreenjava"
    android_weightSum="1">

    <LinearLayout
    android_layout_width="match_parent"
    android_layout_height="match_parent"
    android_orientation="horizontal">
    <ImageView
        android_layout_width="120dp"
        android_layout_height="77dp"
        app_srcCompat="@drawable/leaf"
        android_id="@+id/imageView2"
        android_layout_gravity="end"
        android_background="@color/colorAccent"
         />

    <TextView
        android_text="@string/app_name"
        android_layout_width="match_parent"
        android_layout_height="77dp"
        android_id="@+id/textView2"
        android_textSize="30sp"
        android_textScaleX="2"
        android_gravity="start|center"
        android_elevation="1dp"
        android_textColor="#aaaf"
        android_textStyle="normal|bold"
        android_background="@color/colorAccent"
         />
</LinearLayout>

    <TextView
        android_text="@string/main_page"
        android_layout_width="match_parent"
        android_layout_height="wrap_content"
        android_gravity="start|center"
        android_id="@+id/textView5"
        android_layout_weight="7.88"
        android_textStyle="normal"
        android_textSize="20sp"
        android_background="@color/colorPrimary"
        android_textColor="#ffff"
        android_paddingStart="10dp"
        android_paddingEnd="2dp"
        android_paddingTop="10dp"
        android_paddingBottom="8dp"/>

    <LinearLayout
        android_orientation="horizontal"
        android_layout_width="match_parent"
        android_layout_height="wrap_content"
       >

        <ImageButton
            android_layout_width="match_parent"
            android_layout_height="wrap_content"
            app_srcCompat="@drawable/plus"
            android_id="@+id/imageButton8"
            android_layout_weight="1"
            android_background="@color/colorPrimary"
            android_tint="#ffff"
            android_onClick="addNewFields"/>

        <ImageButton
            android_layout_width="match_parent"
            android_layout_height="match_parent"
            app_srcCompat="@drawable/boss"
            android_id="@+id/imageView"
            android_tint="#ffff"
            android_background="@color/colorPrimary"
            android_layout_weight="1"
            android_onClick="showUserInfo"/>
    </LinearLayout>

    <LinearLayout
        android_orientation="horizontal"
        android_layout_width="match_parent"
        android_layout_height="match_parent">

        <TextView
            android_text="@string/button_info_field"
            android_layout_width="175dp"
            android_layout_height="wrap_content"
            android_id="@+id/textView7"
            android_textColor="#ffff"
            android_textSize="23sp"
            android_background="@color/colorPrimary"
            android_gravity="fill"
            android_layout_weight="0.76"/>

        <TextView
            android_text="@string/button_info_UI"
            android_layout_width="wrap_content"
            android_layout_height="wrap_content"
            android_id="@+id/textView8"
            android_layout_weight="1"
            android_textColor="#ffff"
            android_textSize="23sp"
            android_background="@color/colorPrimary"
            android_gravity="fill"/>
    </LinearLayout>


    <ListView
        android_layout_width="match_parent"
        android_layout_height="match_parent"
        android_layout_weight="1"
android_divider="@color/colorPrimary"
        android_dividerHeight="3dp"
        android_id="@+id/list_view"
/>



</LinearLayout>

1 ответ

  1. Чтобы закрыть базу данных и курсор, сначала вы должны сделать курсор и БД глобальной переменной, как это:

    private SQLiteDatabase db;
    private Cursor cursor;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_homescreen);
        ListView m_listview = (ListView) findViewById(R.id.list_view);
    
        SQLiteOpenHelper AgroDatabase = new AgroDatabase(this);
        db = AgroDatabase.getReadableDatabase();
        cursor = db.query("fieldinfo", new String[]{"_id", "FieldName", "Area"}, null, null, null, null, null);
    

    Теперь вы можете закрыть в функции ondestroy.

    Для обработки onclick элементов listview следуйте приведенному ниже коду внутри oncreate:

     m_listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position,
                                    long id) {
                Log.v("TAG","listview item clicked");
            }
        });