Android列表项替换为新项

时间:2016-08-08 22:12:47

标签: listview android-fragments listviewitem

我在tablayout中有一个片段,我有列表视图来显示项目,点击onItemClick,我想用旧项目替换新项目,当按下后退按钮时,旧项目显示,如父母和孩子,我使用fragmenttransaction.replace,但我不怎么样?

1 个答案:

答案 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();
    }
}