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日志,以确保您的单击被触发?