【问题标题】:ListView Adapter - OnClick to launch a new Activity & OnLongClick to launch a ContextActionBarListView 适配器 - OnClick 启动一个新的 Activity 和 OnLongClick 启动一个 ContextActionBar
【发布时间】:2017-02-18 17:03:57
【问题描述】:

Onclick 和 OnlongClick 不起作用,我正在使用 AppCompatActivity 来支持 KitKat。我不确定为什么它不起作用。是适配器还是视图?我知道我正在使用已弃用的适配器,但我使用它是有目的的。

以下代码:

public class MainActivity extends AppCompatActivity  {

ActionMode mActionMode;

private CartDbAdapter dba;

private Cursor cursor;


public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (savedInstanceState != null) {
        databaseview();
    }
    else {
        setContentView(R.layout.cart);
        dba = new CartDbAdapter(this);
        dba.open();
    }

private void databaseview(){

    cursor = dba.fetchAllBooks();

    ListView listView = (ListView) findViewById(list);

    startManagingCursor(cursor);

    String [] from = new String[] {BookContract.TITLE , BookContract.AUTHORS };
    int [] to = new int [] {android.R.id.text1 , android.R.id.text2  };

    SimpleCursorAdapter databaseAdapter = new  SimpleCursorAdapter(this,android.R.layout.simple_list_item_2, cursor, from, to);

    listView.setAdapter(databaseAdapter);

    listView.setOnLongClickListener(longListener);

    listView.setOnClickListener(clickListener);

}

View.OnLongClickListener longListener = new View.OnLongClickListener() {

    public boolean onLongClick(View view) {
        if (mActionMode != null) {
            return false;
        }
        mActionMode = MainActivity.this.startSupportActionMode(callback);
        view.setSelected(true);
        return true;
    }
};

View.OnClickListener clickListener = new View.OnClickListener(){

    public void onClick(View view) {
        Intent viewIntent = new Intent(MainActivity.this, BookActivity.class);
        Bundle bundle = new Bundle();
        bundle.putParcelable(BookActivity.KEY, dba.fetchBook(view.getId()));
        viewIntent.putExtras(bundle);
        startActivity(viewIntent);
    }
};


private ActionMode.Callback callback = new ActionMode.Callback() {

    public boolean onCreateActionMode(ActionMode mode, Menu menu) {
        MenuInflater inflater = mode.getMenuInflater();
        inflater.inflate(R.menu.contextbar_menu, menu);
        return true;
    }

    public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
        return false;
    }

    public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
        switch (item.getItemId()) {
            case R.id.delete:
                mode.finish();
                return true;
            default:
                return false;
        }
    }

    public void onDestroyActionMode(ActionMode mode) {
        mActionMode = null;
    }
};

谢谢!

【问题讨论】:

标签: java android listview android-adapter


【解决方案1】:

我刚刚通过使用 setOnItemClickListener 和 setOnItemLongClickListener 和 ListView Adapter 解决了这个问题。

listView.setOnItemLongClickListener(new OnItemLongClickListener() {
    @Override
    public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
            int arg2, long arg3) {
        Toast.makeText(arg0.getContext(),     ((TextView)arg1).getText(), Toast.LENGTH_SHORT).show();
        return false;
    }
 });

listView.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> listView, View itemView, int index,
            long id) {
    }
});

【讨论】:

    猜你喜欢
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多