Я могу заполнить список своими значениями базы данных. Моя проблема заключается в том, что макет ListView выглядит так (например) -> (текст, кнопка удаления)ListView с использованием SimpleCursorAdapter OnItemClickListener не работает
Активность 1 || Delete_Button
Активность 2 || Delete_Button
и что я хочу, так это то, что когда я нажму «Активность 1», он перейдет к заданию 1-го действия. или когда я нажал «Действие 2», он перейдет к задаче 2-го действия. то же, что и кнопка удаления, если я нажал кнопку удаления строки 1, она удалит строку 1 и т. д.
Как это сделать? Я новичок в Android.
Это мой код:
ListView listView ;
ArrayList<String> list;
public int goal_id;
int i = 0;
//database variables
MyDBAdapter dbhandler;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_set_act);
TypefaceProvider.registerDefaultIconSets();
Bundle extras = getIntent().getExtras();
if (extras == null) {
return;
}
goal_id = Integer.parseInt(extras.getString("goalid"));
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
toolbar.setSubtitle("Activities List");
ActionBar actionBar = getSupportActionBar();
actionBar.setHomeAsUpIndicator(R.drawable.ic_back);
actionBar.setDisplayHomeAsUpEnabled(true);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Added new activity", Snackbar.LENGTH_LONG)
.setAction("Added new activity", null).show();
onCLick_addAct();
}
});
dbhandler = new MyDBAdapter(this);
populateListView();
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Long temp = listView.getItemIdAtPosition(position);
MessageTo.message(SetActActivity.this, Long.toString(temp));
}
});
}
public void populateListView(){
Cursor cursor = dbhandler.getAllActivitiesByGoalCursor(goal_id);
String[] actlist = new String[] {dbhandler.dbhandler.COLUMN_ACTIVITY_NAME};
int[] actNames = new int[] {R.id.list_item_string};
SimpleCursorAdapter myAdapter = new SimpleCursorAdapter(SetActActivity.this,R.layout.act_list,cursor,actlist,actNames,0){
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
ViewHolder holder;
if (v == null) {
holder = new ViewHolder();
LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.act_list, null);
holder.textView = (TextView) v.findViewById(R.id.list_item_string);
holder.button = (Button) v.findViewById(R.id.delete_btn);
v.setTag(holder);
holder.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int pos = (int) v.getTag();
list.remove(pos);
notifyDataSetChanged();
}
});
} else {
holder = (ViewHolder) v.getTag();
}
// holder.textView.setText(list.get(position).get("title")); //the get("title") is error. undefined
holder.button.setTag(position);
return v;
}
class ViewHolder {
TextView textView;
Button button;
}
};
//handle listview and assign adapter
listView = (ListView)findViewById(R.id.list);
// Attach cursor adapter to the ListView
listView.setAdapter(myAdapter);
}
Это один код -> он не будет различать, если я нажал на TextView или кнопку удаления. Он по-прежнему будет реализовывать ту же функцию, что и не то, что я хочу. :(
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Long temp = listView.getItemIdAtPosition(position);
MessageTo.message(SetActActivity.this, Long.toString(temp));
}
});
вам нужно создать пользовательский класс SimpleCursorAdapter и переопределить GetView() метод и следовать @Ichigo Kurosakio пост. – Bharatesh
как переопределить ?? :(@bharat – Ruby
на кнопку «удалить»: вы действительно хотите удалить соответствующую строку в базе данных? – 0X0nosugar