必需的:
1.我想在Android中制作一个分段的标题列表视图。
2.这应该是滑动删除一个项目,像Gmail App.but Gmail App不包含Section Header的Undo选项。
3.我的应用程序应该有部分标题。
我尝试了下面提到的链接,让滑动与撤消按钮一起删除。它工作得很好。
问题:
编辑:1(列表视图)
1.我在 Listview Link-Swipe 中找到了Swipe to Delete a item with Undo 以删除 listview 项目和Section Header Using Listview link-Section header in listview 的代码。
2.两者都有两个不同的基本适配器我遇到了一些错误,请帮助我合并该适配器或建议我任何新的方法来在滑动中添加部分标题以删除列表视图项目。
代码: 列表视图中滑动删除和节标题的类
ListViewActivity.class
package com.data.swipetodeletesimplelistview;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
import static android.widget.Toast.LENGTH_SHORT;
public class ListViewActivity extends AppCompatActivity {
private static final int TIME_TO_AUTOMATICALLY_DISMISS_ITEM = 3000;
/*For Section header*/
ListView mListView;
ArrayList<String> mArrayList = new ArrayList<String>();
SectionedAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_view);
init((ListView) findViewById(R.id.list_view));
/*For Section Header Starts Here*/
mListView = (ListView) findViewById(R.id.list_view);
adapter = new SectionedAdapter() {
@Override
protected View getHeaderView(String caption, int index, View convertView, ViewGroup parent) {
convertView = getLayoutInflater().inflate(R.layout.section_header, null);
TextView header = (TextView) convertView.findViewById(R.id.header);
header.setText(caption);
return convertView;
}
};
for (int i = 0; i < 5; i++)
{
mArrayList.add("Item " + i);
MyAdapter myAdapter = new MyAdapter();
adapter.addSection("Header " + i, myAdapter);
}
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
Toast.makeText(getApplicationContext(), arg0.getAdapter().getItem(position).toString(), Toast.LENGTH_LONG).show();
}
});
mListView.setAdapter(adapter);
/*For Section Header Ends Here*/
}
/*FOr Swipe to Delete a item Starts Here*/
private void init(ListView listView)
{
final MyBaseAdapter adapter = new MyBaseAdapter();
listView.setAdapter(adapter);
final SwipeToDismissTouchListener<ListViewAdapter> touchListener =
new SwipeToDismissTouchListener<>(
new ListViewAdapter(listView),
new SwipeToDismissTouchListener.DismissCallbacks<ListViewAdapter>() {
@Override
public boolean canDismiss(int position) {
return true;
}
@Override
public void onPendingDismiss(ListViewAdapter recyclerView, int position) {
}
@Override
public void onDismiss(ListViewAdapter view, int position) {
adapter.remove(position);
}
});
touchListener.setDismissDelay(TIME_TO_AUTOMATICALLY_DISMISS_ITEM);
listView.setOnTouchListener(touchListener);
// Setting this scroll listener is required to ensure that during ListView scrolling,
// we don't look for swipes.
listView.setOnScrollListener((AbsListView.OnScrollListener) touchListener.makeScrollListener());
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (touchListener.existPendingDismisses()) {
touchListener.undoPendingDismiss();
} else {
Toast.makeText(ListViewActivity.this, "Position " + position, LENGTH_SHORT).show();
}
}
});
}
/*FOr Swipe to Delete*/
static class MyBaseAdapter extends BaseAdapter
{
private static final int SIZE = 100;
private final List<String> mDataSet = new ArrayList<>();
MyBaseAdapter() {
for (int i = 0; i < SIZE; i++)
mDataSet.add(i, "This is row number " + i);
}
@Override
public int getCount() {
return mDataSet.size();
}
@Override
public String getItem(int position) {
return mDataSet.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
public void remove(int position) {
mDataSet.remove(position);
notifyDataSetChanged();
}
static class ViewHolder {
TextView dataTextView;
ViewHolder(View view) {
dataTextView = (TextView) view.findViewById(R.id.txt_data);
view.setTag(this);
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = convertView == null
? new ViewHolder(convertView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_item, parent, false)) : (ViewHolder) convertView.getTag();
viewHolder.dataTextView.setText(mDataSet.get(position));
return convertView;
}
}
/*FOr Swipe to Delete a item Ends Here*/
/*For adding Section header*/
class MyAdapter extends BaseAdapter
{
public int getCount()
{
return mArrayList.size();
}
public Object getItem(int position)
{
return mArrayList.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
convertView = (TextView) getLayoutInflater().inflate(R.layout.section_item, null);
TextView item = (TextView) convertView.findViewById(R.id.item);
item.setText(mArrayList.get(position));
return convertView;
}
}
}