【问题标题】:I have a listview that displays data from Sqlite Database but it does not work when click is fired on it?我有一个列表视图,它显示来自 Sqlite 数据库的数据,但是当点击它时它不起作用?
【发布时间】:2015-12-07 16:53:09
【问题描述】:

我有一个列表视图,它显示来自 Sqlite 数据库的数据,但是当点击它时它不起作用。有两个不同的用户“管理员”和“普通用户”。 setOnItemClickListner 可以与“普通用户”正常工作,但不能与“管理员”用户一起工作。

这是我的代码:

 public class ShowUserList extends AppCompatActivity {

SimpleCursorAdapter sca;
BaseCustomArrayListAdapter bcal;
DataBaseHelper DBHelp = new DataBaseHelper(this);
ArrayList<String> col;
String uname, pass;
ListView lv;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_show);
    Intent i = getIntent();
    uname = i.getStringExtra("Username");
    pass = i.getStringExtra("Password");
    String userrole = "";
    lv = (ListView) findViewById(R.id.listView);
    DBHelp.open();
    Cursor c = DBHelp.CheckUserRole(uname, pass);
    for(c.moveToFirst();!c.isAfterLast();c.moveToNext()){
        userrole = c.getString(c.getColumnIndex(DataBaseHelper.Key_USER_ROLE));
    }
    if(userrole.equals("Admin")){
        GetData();
    }
    else if(userrole.equals("User")){
        getdatauser();
    }
    DBHelp.close();

    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Log.d("List Item","Clicked");
            Log.d("Position", "" + position);
            int pos = position+1;
            Toast.makeText(ShowUserList.this,"List Item Clicked",Toast.LENGTH_SHORT).show();
            Intent details_intent = new Intent(ShowUserList.this,ShowListExtended.class);
            details_intent.putExtra("POSITION", ""+pos);
            startActivity(details_intent);
        }
    });
}

public void GetData(){
    DBHelp.open();
    Cursor c = DBHelp.getData();
    col = new ArrayList<String>();
    for(c.moveToFirst();!c.isAfterLast();c.moveToNext()){
        col.add(c.getString(c.getColumnIndex(DataBaseHelper.Key_FULL_NAME)) +
                "\n" +
                c.getString(c.getColumnIndex(DataBaseHelper.Key_GENDER)) +
                "\n" +
                c.getString(c.getColumnIndex(DataBaseHelper.Key_HOBBIES)) + "\n");
    }
    lv = (ListView) findViewById(R.id.listView);
    bcal = new BaseCustomArrayListAdapter(this,col);
    lv.setAdapter(bcal);
    bcal.notifyDataSetChanged();
    lv.invalidateViews();
    DBHelp.close();
}

public void getdatauser(){
    DBHelp.open();
    Cursor c = DBHelp.getData();
    String[] columns = {
            DataBaseHelper.Key_FULL_NAME,
            DataBaseHelper.Key_GENDER,
            DataBaseHelper.Key_HOBBIES
    };
    int[] to = {
            R.id.userFullName,
            R.id.userGender1,
            R.id.userHobbies1
    };
    lv = (ListView) findViewById(R.id.listView);
    sca = new SimpleCursorAdapter(ShowUserList.this,R.layout.listview_user,c,columns,to,0);
    lv.setAdapter(sca);
    sca.notifyDataSetChanged();
    lv.invalidateViews();
    DBHelp.close();
}

如果有人可以提供帮助将不胜感激...谢谢..

【问题讨论】:

    标签: android android-listview


    【解决方案1】:

    如果您使用自定义布局来显示列表项 - 请检查 this answer。 其他想法是更改将点击侦听器添加到列表的方式。另一种方法是:

    1. this 传递给ListView 的setOnItemClickListener 方法
    2. 让您的ShowUserList 类实现所需的接口方法
    3. 在实现的方法中编写点击事件代码。

    【讨论】:

      猜你喜欢
      • 2018-04-15
      • 2020-12-04
      • 1970-01-01
      • 1970-01-01
      • 2014-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多