2017-08-22 25 views
0

我正在構建棋盤遊戲的計算器應用程序。 應用程序包含玩家可用的所有土地的列表,應用程序應該能夠添加和刪除玩家列表中的物品。Android:從列表中添加和刪除項目到列表視圖

注意:應用程序應根據玩家手中的土地來計算玩家的利潤。

Player View Lands View 我希望能夠從土地的土地名單從播放器中點擊刪除按鈕時添加到球員,當上添加按鈕,用戶點擊刪除的土地。基於每個列表中的選定項目。

注:我使用的是相同的適配器列表中播放的項目和土地查看

public class DetailsActivity extends AppCompatActivity { 

private ListView ProjectsLV; 
private ProjectAdapter Adapter; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_details); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    FloatingActionButton add_fab = (FloatingActionButton) findViewById(R.id.add_fab); 
    add_fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Snackbar.make(view, "Add Project", Snackbar.LENGTH_LONG) 
        .setAction("Action", null).show(); 
     } 
    }); 

    FloatingActionButton remove_fab = (FloatingActionButton) findViewById(R.id.remove_fab); 
    remove_fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Snackbar.make(view, "Remove Projects", Snackbar.LENGTH_LONG) 
        .setAction("Action", null).show(); 
     } 
    }); 

    Player Player = (Player)getIntent().getSerializableExtra("Player"); 

    ArrayList<Project> Projects = (ArrayList<Project>) getIntent().getSerializableExtra("Projects"); 
    Adapter = new ProjectAdapter(getApplicationContext(), Player.getProjects()); 

    ProjectsLV = (ListView)findViewById(R.id.ProjectsListView); 
    ProjectsLV.setAdapter(Adapter); 
} 

}

+0

您將數據傳遞從Player.getProjects(適配器),添加或從列表中刪除任何項目,你將不得不執行上這方面的行動數組,然後調用adapter.notifyDataSetChanged – HariRam

回答

0

我說就怎麼做它的一些線,我自己的風格,你可以按照相同的方式來實現你想要的,但我會詳細解釋發生了什麼。 首先我創建了一個字段projectList,這樣我就可以在課程內部的任何地方訪問它,並且在添加或刪除此列表中的項目之後,您只需調用適配器上的notifyDataSetChange()即可更新您擁有的列表視圖。我希望這是夠好的。

public class DetailsActivity extends AppCompatActivity { 
private List<Project> projectsList; 
private ListView ProjectsLV; 
private ProjectAdapter Adapter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_details); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    FloatingActionButton add_fab = (FloatingActionButton) findViewById(R.id.add_fab); 


    FloatingActionButton remove_fab = (FloatingActionButton) findViewById(R.id.remove_fab); 


    Player Player = (Player)getIntent().getSerializableExtra("Player"); 

    ArrayList<Project> Projects = (ArrayList<Project>) getIntent().getSerializableExtra("Projects"); 
    projectsList = Plyaer.getProjects(); 
    Adapter = new ProjectAdapter(getApplicationContext(), projectsList); 

    ProjectsLV = (ListView)findViewById(R.id.ProjectsListView); 
    ProjectsLV.setAdapter(Adapter); 
    add_fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Snackbar.make(view, "Add Project", Snackbar.LENGTH_LONG) 
        .setAction("Action", null).show(); 
      // create the new project and call the addProjectToList method; 
      prjectsList = addProjectToList(projectsList,project); 
      Adapter.notifyDataSetChange(); 
     } 
    }); 
    remove_fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Snackbar.make(view, "Remove Projects", Snackbar.LENGTH_LONG) 
        .setAction("Action", null).show(); 
      // choose the project to remove and call the removeProjectFromList method; 
      removeProjectFromList(projectsList,project); 
      Adapter.notifyDataSetChange(); 
     } 
    }); 

} 
    private List<Project> addProjectToList(List<Project> projectsList,Project project){ 
     projectsList.add(project); 
     return projectsList; 
    } 
    private List<Project> removeProjectFromList(List<Project> projectsList,Project project){ 
     projectsList.remove(project); 
     return projectsList; 
    } 
} 
+0

太棒了!但我有一個問題,我怎樣才能從這兩個列表中選擇(播放器和項目列表) –

+0

@NasserX projectLV.setOnItemClickListener(new OnItemClickListener(){......這會給你在單擊項目的位置onitemclick方法,然後你可以通過他們的索引提取播放器和對象 –

+0

@greenapps將刪除評論然後 –

0

更新的類

public class DetailsActivity extends AppCompatActivity { 

private ListView ProjectsLV; 
private ProjectAdapter Adapter; 
private ArrayList<Project> PlayerProjectList; 
private Project selectedProject; 
private ArrayList<Project> Projects; 
private Player Player; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_details); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    FloatingActionButton add_fab = (FloatingActionButton) findViewById(R.id.add_fab); 
    FloatingActionButton remove_fab = (FloatingActionButton) findViewById(R.id.remove_fab); 

    Player = (Player)getIntent().getSerializableExtra("Player"); 

    Projects = (ArrayList<Project>) getIntent().getSerializableExtra("Projects"); 
    PlayerProjectList = Player.getProjects(); 

    Adapter = new ProjectAdapter(getApplicationContext(), PlayerProjectList); 

    ProjectsLV = (ListView)findViewById(R.id.ProjectsListView); 
    ProjectsLV.setAdapter(Adapter); 

    ProjectsLV.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      selectedProject =(Project) (ProjectsLV.getItemAtPosition(position)); 
     } 
    }); 

    add_fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Snackbar.make(view, "Add Project", Snackbar.LENGTH_LONG) 
        .setAction("Action", null).show(); 
      // create the new project and call the addProjectToList method; 
      PlayerProjectList = addProjectToList(PlayerProjectList, selectedProject); 
      Adapter.notifyDataSetChanged(); 
     } 
    }); 

    remove_fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Snackbar.make(view, "Remove Projects", Snackbar.LENGTH_LONG) 
        .setAction("Action", null).show(); 
      // choose the project to remove and call the removeProjectFromList method; 
      removeProjectFromList(PlayerProjectList, selectedProject); 
      Adapter.notifyDataSetChanged(); 
     } 
    }); 
} 

private ArrayList<Project> addProjectToList(ArrayList<Project> projectsList,Project project){ 
    projectsList.add(project); 
    return projectsList; 
} 
private ArrayList<Project> removeProjectFromList(ArrayList<Project> projectsList,Project project){ 
    projectsList.remove(project); 
    return projectsList; 
} 

}

+0

如果我在項目列表中添加了一個複選框,會更好嗎?將不得不爲項目創建一個不同的適配器,因爲我正在使用的適配器正在被使用,從而將項目列表顯示給用戶讀取,並且不應該由用戶更改。 –