Android 设置项目单击listview中项目的侦听器并转到新活动
我有列表视图(数据从数据库中检索并放入列表视图)。我要做的是使列表中的每个项目都可单击,单击后,我希望它转到一个新的活动。我尝试了一个Android 设置项目单击listview中项目的侦听器并转到新活动,android,Android,我有列表视图(数据从数据库中检索并放入列表视图)。我要做的是使列表中的每个项目都可单击,单击后,我希望它转到一个新的活动。我尝试了一个setOnItemClickListener,但它不起作用 public class MomentsActivity extends AppCompatActivity { ListView listView; TextView description; TextView location; TextView name;
setOnItemClickListener
,但它不起作用
public class MomentsActivity extends AppCompatActivity {
ListView listView;
TextView description;
TextView location;
TextView name;
//ImageView image; used later when we want to display the image
private TextView mTextMessage;
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
= new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.navigation_moments:
Intent intent = new Intent(MomentsActivity.this, MomentsActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(intent);
break;
case R.id.navigation_addmoment:
Intent intent2 = new Intent(MomentsActivity.this, AddMomentActivity.class);
intent2.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(intent2);
break;
}
return false;
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
myDb = new DatabaseHelper(this);
setContentView(R.layout.activity_moments);
BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
mList = this.findViewById(R.id.my_listview);
listView = (ListView) findViewById(R.id.my_listview);
mList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(MomentsActivity.this,MainActivity.class);
intent.putExtra("textview_name", listView.getItemIdAtPosition(position));
startActivity(intent);
}
});
manageListView();
getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
getSupportActionBar().setCustomView(R.layout.actionbar_layout);
}
DatabaseHelper myDb;
EditText editTitle, editDescription, editLocation;
Button btnAddData;
Button btnViewAll;
SimpleCursorAdapter mSCA; //Adapts/Handles the data for the listview
ListView mList;
Cursor mCsr;
int[] item_layout_ids_for_list = new int[]{
R.id.textview_name,
R.id.textview_description,
R.id.textview_location
};
String[] columns_to_list = new String[]{
DatabaseHelper.COL_2,
DatabaseHelper.COL_3,
DatabaseHelper.COL_5
};
private void manageListView() {
mCsr = myDb.getAllData();
if (mSCA == null) {
// Builds the Adapter for the List
mSCA = new SimpleCursorAdapter(
this,
R.layout.mylistview_item, mCsr,
columns_to_list,
item_layout_ids_for_list,
0
);
mList.setAdapter(mSCA); // Ties the Adapter to the ListView
} else {
mSCA.swapCursor(mCsr); // Refresh the List
}
}
@Override
protected void onDestroy() {
super.onDestroy();
mCsr.close();
}
@Override
protected void onResume() {
super.onResume();
manageListView();
}
}
公共类MomentsActivity扩展了AppCompatActivity{
列表视图列表视图;
文本视图描述;
文本视图位置;
文本视图名称;
//ImageView图像;稍后我们要显示图像时使用
私有文本视图mTextMessage;
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
=新的BottomNavigationView.OnNavigationItemSelectedListener(){
@凌驾
公共布尔值onNavigationItemSelected(@NonNull MenuItem item){
开关(item.getItemId()){
案例R.id.navigation\u时刻:
意向意向=新意向(MomentsActivity.this,MomentsActivity.class);
intent.addFlags(intent.FLAG\u活动\u无\u动画);
星触觉(意向);
打破
案例R.id.navigation\u add时刻:
Intent intent2=新意图(MomentsActivity.this,AddMomentActivity.class);
intent2.addFlags(Intent.FLAG\u活动\u无\u动画);
星触觉(intent2);
打破
}
返回false;
}
};
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
myDb=新数据库助手(此);
setContentView(R.layout.activity_矩);
BottomNavigationView导航=(BottomNavigationView)findViewById(R.id.navigation);
setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
mList=this.findviewbyd(R.id.my_列表视图);
listView=(listView)findViewById(R.id.my_listView);
mList.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
意向意向=新意向(MomentsActivity.this,MainActivity.class);
intent.putExtra(“textview_name”,listView.getItemIDataPosition(position));
星触觉(意向);
}
});
manageListView();
getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY\u SHOW\u CUSTOM);
getSupportActionBar().setCustomView(R.layout.actionbar_布局);
}
数据库助手myDb;
EditText editTitle、editDescription、editLocation;
按钮BTNADDATA;
按钮btnViewAll;
SimpleCursorAdapter mSCA;//为listview调整/处理数据
ListView-mList;
光标mCsr;
int[]项目\布局\列表的ID \新int[]{
R.id.textview\u名称,
R.id.textview\u说明,
R.id.textview\u位置
};
字符串[]列到列表=新字符串[]{
DatabaseHelper.COL_2,
DatabaseHelper.COL_3,
DatabaseHelper.COL_5
};
私有void manageListView(){
mCsr=myDb.getAllData();
如果(mSCA==null){
//为列表生成适配器
mSCA=新的SimpleCorsorAdapter(
这
R.layout.mylistview\u项目,mCsr,
列到列列表,
用于列表的项目布局标识,
0
);
mList.setAdapter(mSCA);//将适配器绑定到ListView
}否则{
mSCA.swapCursor(mCsr);//刷新列表
}
}
@凌驾
受保护的空onDestroy(){
super.ondestory();
mCsr.close();
}
@凌驾
受保护的void onResume(){
super.onResume();
manageListView();
}
}
在列表中单击后执行操作的最佳方法是在getview()中的方法listview适配器中执行该操作
所以在你的适配器中
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
.....
.....
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//use context in adapter constructor;
Activity activity = (Activity) context
Intent intent = new Intent(context,MainActivity.class);
intent.putExtra("textview_name", listView.getItemIdAtPosition(position));
activity.startActivity(intent);
}
});
return view ;
}
别忘了在列表视图上删除你的setOnItemClickListener
,你说它不工作是什么意思?您是否收到错误或异常?什么都没发生?您是否尝试在onItemClick
中添加Logcat日志,以确保您的单击被触发?