我在tablayout中有一个片段,我有列表视图来显示项目,点击onItemClick,我想用旧项目替换新项目,当按下后退按钮时,旧项目显示,如父母和孩子,我使用fragmenttransaction.replace,但我不怎么样?
答案 0 :(得分:0)
这更多地取决于你正在做什么。重点是列表视图没有实际对象,只有适配器支持的视图。单击该项目时,需要修改支持列表视图的数据结构以显示备用视图。然后通知适配器项目已更改。
然后,当您按下后退按钮时,您将捕获onBackPressed并使用它将所有视图恢复为原始版本,并再次通知适配器项目已更改。
最简单的代码:
public class MainActivity extends AppCompatActivity {
ArrayList<String> items = new ArrayList<>();
static final String blah = "Blah";
static final String touched = "Touched!";
static final int LIMIT = 1000;
BaseAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView v = (ListView)findViewById(R.id.listView);
for (int i = 0; i < LIMIT; i++) {
items.add(blah);
}
adapter = new BaseAdapter() {
@Override
public int getCount() {
return items.size();
}
@Override
public Object getItem(int i) {
return items.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
TextView tv;
if (view != null) {
tv = (TextView)view;
}
else {
tv = new TextView(MainActivity.this);
tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Integer value = (Integer)view.getTag();
items.set(value, touched);
notifyDataSetChanged();
}
});
}
tv.setTag(i);
tv.setText(items.get(i));
return tv;
}
};
v.setAdapter(adapter);
}
@Override
public void onBackPressed() {
boolean flag = false;
for (int i = 0; i < LIMIT; i++) {
if (!blah.equals(items.get(i))) {
flag = true;
items.set(i,blah);
}
}
if (flag) adapter.notifyDataSetChanged();
else super.onBackPressed();
}
}