2012-02-16 63 views
1

我有2 xml文件,其中我有一個listView的主文件,另一個我正在對我的listView進行一些定製。 第二個xml用於我的Custom ArrayAdapterImageView setVisibility(0)和空指針異常

在第二xml我有一個ImageView,我想在一個時刻設置爲可見的,但我得到了null pointer exception,因爲我從來沒有與setCurrentView設置第二xml文件,其中是我的ImageView

我試圖做到這一點:

ImageView statusOk=(ImageView)findViewById(R.id.statusOkImage); 
statusOk.setVisibility(0); 

你能告訴我該怎麼解決?

謝謝。

編輯:

這裏是更多的代碼:

main.xml中

<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <ListView 
    android:id="@+id/ListView01" 
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent"/> 
</LinearLayout> 

第二個XML:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 

<ImageView 
    android:id="@+id/statusOkImage" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@drawable/status_ok" 
    android:visibility="invisible"/> 

    <TextView android:id="@+id/name" 
    android:textSize="14sp" 
    android:textStyle="bold" 
    android:textColor="#FFFF00" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"/> 
<TextView android:id="@+id/cityState" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"/> 
<TextView android:id="@+id/phone" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"/> 
</LinearLayout> 

MainActivity:

public class TestListActivity extends Activity { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    ArrayList<SearchResults> searchResults = GetSearchResults(); 
    final ListView lv1 = (ListView) findViewById(R.id.ListView01); 
    lv1.setAdapter(new MyCustomBaseAdapter(this, searchResults)); 
} 

private ArrayList<SearchResults> GetSearchResults(){ 
ArrayList<SearchResults> results = new ArrayList<SearchResults>(); 

SearchResults sr1 = new SearchResults(); 
sr1 = new SearchResults(); 
sr1.setName("Fred Jones"); 
sr1.setCityState("Las Vegas, NV"); 
sr1.setPhone("612-555-8214"); 
results.add(sr1); 
return results; 
} 
} 

自定義適配器:

public class MyCustomBaseAdapter extends BaseAdapter { 
private static ArrayList<SearchResults> searchArrayList; 

private LayoutInflater mInflater; 

public MyCustomBaseAdapter(Context context, ArrayList<SearchResults> results) { 
    searchArrayList = results; 
    mInflater = LayoutInflater.from(context); 
} 

public int getCount() { 
    return searchArrayList.size(); 
} 

public Object getItem(int position) { 
    return searchArrayList.get(position); 
} 

public long getItemId(int position) { 
    return position; 
} 

public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder holder; 
    if (convertView == null) { 
    convertView = mInflater.inflate(R.layout.custom_row_view, null); 
    holder = new ViewHolder(); 
    holder.txtName = (TextView) convertView.findViewById(R.id.name); 
    holder.txtCityState = (TextView) convertView.findViewById(R.id.cityState); 
    holder.txtPhone = (TextView) convertView.findViewById(R.id.phone); 


    convertView.setTag(holder); 
    } else { 
    holder = (ViewHolder) convertView.getTag(); 
    } 

    mInflater=(LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE); 

    View view=mInflater.inflate(R.layout.custom_row_view, null); 

    ImageView statusOk=(ImageView)view.findViewById(R.id.imageView1); 
     statusOk.setVisibility(View.VISIBLE); 
    holder.txtName.setText(searchArrayList.get(position).getName()); 
    holder.txtCityState.setText(searchArrayList.get(position).getCityState()); 
    holder.txtPhone.setText(searchArrayList.get(position).getPhone()); 

    return convertView; 
} 

static class ViewHolder { 
    TextView txtName; 
    TextView txtCityState; 
    TextView txtPhone; 
} 
} 

而且finnaly資源類爲ListView

public class SearchResults { 
private String name = ""; 
private String cityState = ""; 
private String phone = ""; 

public void setName(String name) { 
    this.name = name; 
} 

public String getName() { 
    return name; 
} 

public void setCityState(String cityState) { 
    this.cityState = cityState; 
} 

public String getCityState() { 
    return cityState; 
} 

public void setPhone(String phone) { 
    this.phone = phone; 
} 

public String getPhone() { 
    return phone; 
} 
} 
+1

你是如何誇大其持有的''statusOk'的ImageView'第二種觀點的背景下? – Macarse 2012-02-16 12:36:44

+0

謝謝麥斯,我沒有誇大他,怎麼做? – 2012-02-16 12:38:42

+0

檢查這個問題:http://stackoverflow.com/q/3477422/119895 – Macarse 2012-02-16 12:44:08

回答

4

設置定義在XML中的知名度來看,你需要充氣,活動這一觀點,的setContentView自動去做,因爲你是不是在第二個XML調用的setContentView,然後使用:

LayoutInflater inflater=(LayoutInflater)getSystemService(Layout_INFLATER_SERVICE); 
View view=inflater.inflate(R.layout.secondxml, null); 

,然後找到你從這個角度來看:

ImageView statusOk=(ImageView)view.findViewById(R.id.statusOkImage); 
statusOk.setVisibility(0); 

但它只適用於視圖對象,它不影響原始xml。

+0

謝謝你的回答,但膨脹(R.layout.secondxml);問我另一個整數論證。 – 2012-02-16 12:47:13

+0

代替secondxml編寫您的seond xml名稱。 – jeet 2012-02-16 12:51:30

+0

是的,但膨脹方法需要多一個參數View view = inflater.inflate(R.layout.user_submissions_customisation,「ViewGroup」); – 2012-02-16 12:54:30

2

更改爲:

statusOk.setVisibility(View.INVISIBLE); 

和檢查圖像就可以使用findViewById,喜歡你調用該方法並在做了setContentView之後,或者它確實是ImageView等。

+0

謝謝你,但仍然是同樣的問題:這是我認爲的一個觀點問題。 – 2012-02-16 12:34:08

+0

顯示更多的代碼和XML,所以也許我們會發現錯誤。 – goodm 2012-02-16 12:36:19

2

這是從另一個類訪問視圖的解決方案。 注:currentActivity是根類

LayoutInflater inflater = (LayoutInflater)currentActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
View view=inflater.inflate(R.layout.secondxml, null); 
+0

我需要(Context.LAYOUT_INFLATER_SERVICE)代碼,謝謝! – user3079872 2016-01-11 11:19:27

0
ImageView imgview=(ImageView)findViewById(R.id.imageView1); 
imgview.setVisibility(View.INVISIBLE); //for invisibility. 

imgview.setVisibility(View.VISIBLE); //make your image visible where ever you want