2014-10-05 87 views
1

我有包含三個項目,例如一個數組:如何從字符串數組中刪除元素?

title_list = new String[] { title1, title2, title3 }; 

這些值從SharedPreferences到來。我想檢查一下,如果這些值中的任何一個都是空的,它們應該從數組中移除。

例如,如果title1的值來自其他活動並且是null,那麼應該刪除title1,該數組將爲String[] { title2, title3 }

這裏是我的代碼:

package com.example.e_services; 

import android.app.Activity; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.preference.PreferenceManager; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ListView; 

public class FavList extends Activity { 
    // Declare Variables 
    ListView list; 
    FavListViewAdapter adapter; 
    String[] rank; 
    String[] link; 
    String[] population; 
    String title1, title2; 
    String link1, link2; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     // Get the view from listview_main.xml 
     setContentView(R.layout.listview_main2); 

     SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 

     title1 = prefs.getString("title1", ""); //no id: default value 
     title2 = prefs.getString("title2", ""); //no id: default value 

     link1 = prefs.getString("link1", ""); //no id: default value 
     link2 = prefs.getString("link2", ""); //no id: default value 

     if (title1.length() == 0){ 
      rank[0] = null;    
     } 

     // Generate sample data into string arrays 
     rank = new String[] { title1, title2, "title3" }; 
     link = new String[] { link1, link2 }; 

     // Locate the ListView in listview_main.xml 
     list = (ListView) findViewById(R.id.listview); 

     // Pass results to ListViewAdapter Class 
     adapter = new FavListViewAdapter(this, rank); 
     // Binds the Adapter to the ListView 
     list.setAdapter(adapter); 
     // Capture ListView item click 
     list.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       Intent i = new Intent(FavList.this, WebsiteView.class); 
       // Pass all data rank 
       i.putExtra("Link", link); 
       i.putExtra("position", position); 
       //Toast.makeText(getBaseContext(), "link "+link1,Toast.LENGTH_SHORT).show(); 
       startActivity(i); 
      } 
     }); 
    } 
} 

我試圖用

if (title1.length() == 0){ 
    title_list[0] = null;    
} 

,但沒有奏效。

+0

你不能從一個數組中刪除一個元素,它有一個固定的大小。你將不得不創建一個新的,更小的陣列,並複製你想要的元素。 – Keppil 2014-10-05 19:47:30

+0

@Keppil爲什麼op不能從數組中刪除任何元素。唯一需要做的事情是,將其他現有元素向前或向後移到與已刪除數組索引相關的位置 – 2014-10-05 19:50:20

+0

說「它沒有用」並沒有告訴我們任何有關您預期會發生什麼或實際發生的事情。 – 2014-10-05 20:05:21

回答

3

您不能從現有數組中移除一個元素 - 一旦您創建了一個數組,它的長度就是固定的。您可以用替換元素,但不能添加或刪除它們。

選項:

  • 更改變量的值來引用一個新的列表,例如

    title_list = new String[] { title_list[1], title_list[2] }; 
    
  • 使用List<String>而是使用類似的ArrayList<String>作爲實現

+0

爲什麼操作無法從陣列中刪除任何元素。唯一需要做的事情是,將其他現有元素向前或向後移至被刪除數組的索引處 – 2014-10-05 20:00:03

+3

@KickButtowski:「Remove」表示數組的長度將改變。向後或向前移動元素不會那樣做。你*不能*刪除數組中的元素,因爲它的大小是固定的。如果OP很好地保留了一個只有兩個元素是「有用」的3元素數組,那沒問題......但它不會刪除元素。 – 2014-10-05 20:04:38

+1

@KickButtowski:特別是,OP在問題中說:「並且數組將會是String [] {title2,title3}」 - 如果元素在3元素數組中被替換,情況就不會如此。 – 2014-10-05 20:05:56