Обработка кликов внутри списка - PullRequest
0 голосов
/ 08 июня 2018

Я новичок в Android и мне нужна помощь с моим ListView, который содержит текстовое представление и изображение в каждом элементе списка.Мне нужно обрабатывать клики по элементу списка и по значку (R.id.list_star) в элементе списка отдельно.Я пробовал несколько способов, но, кажется, я не могу сделать это сам.Я пытался поместить star.setOnItemClickListener в начале, около lvData.setOnItemClickListener - но в этом случае представление не найдено, и добавить swith внутри AdapterView.OnItemClickListener - не работает.Мой код обрабатывает только щелчки элементов списка, но не щелчки значков

import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.support.v4.widget.SimpleCursorAdapter;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Toast;

public class ListViewActivity extends AppCompatActivity  implements LoaderManager.LoaderCallbacks<Cursor> {

ListView lvData;
DB db;
SimpleCursorAdapter scAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_list_view);

    db = new DB(this);
    db.open();

    String[] from = new String[]{DB.COLUMN_IMG, DB.COLUMN_TXT, DB.COLUMN_IMG2};
    int[] to = new int[]{R.id.list_label, R.id.list_text, R.id.list_star};

    scAdapter = new SimpleCursorAdapter(this, R.layout.list_item, null, from, to, 0);
    lvData = (ListView) findViewById(R.id.list);
    lvData.setAdapter(scAdapter);

    getSupportLoaderManager().initLoader(0, null, this);

    lvData.setOnItemClickListener(mOnListItemClickListener);
}

final Context context = this;

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

@Override
public Loader<Cursor> onCreateLoader(int id, Bundle bndl) {
    return new MyCursorLoader(this, db);
}

@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
    scAdapter.swapCursor(cursor);
}

@Override
public void onLoaderReset(Loader<Cursor> loader) {
}

static class MyCursorLoader extends CursorLoader {

    DB db;

    public MyCursorLoader(Context context, DB db) {
        super(context);
        this.db = db;
    }

    @Override
    public Cursor loadInBackground() {
        Cursor cursor = db.getAllData();
        return cursor;
    }

}

private AdapterView.OnItemClickListener mOnListItemClickListener = new AdapterView.OnItemClickListener() {
    public void onItemClick(AdapterView parent, View v, int position, long id) {

        Cursor cursor = (Cursor) scAdapter.getItem(position);

        switch (v.getId()) {
            case R.id.list_star:
                Toast.makeText(getApplicationContext(), "star", Toast.LENGTH_SHORT).show();

            case R.id.list_label:
                Toast.makeText(getApplicationContext(), "label", Toast.LENGTH_SHORT).show();

        }

        ImageView star = (ImageView) findViewById(R.id.list_star);
        star.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getApplicationContext(), "Вы выбрали стихи Агнии Барто", Toast.LENGTH_SHORT).show();
            }
        });

        Intent intent = new Intent(context, ViewPagerActivity.class);
        String pos = Long.toString(position);
        intent.putExtra("pos", pos);
        startActivity(intent);
    }
};

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...