2012-02-16 4 views
1

나는 listView이있는 주 파일과 listView의 일부 사용자 정의 파일을 가지고 있습니다. 두 번째 xml은 내 맞춤 ArrayAdapter에 사용됩니다. 두 번째 xml에서 ImageView setVisibility (0) 및 널 포인터 예외

난 내가 한 순간에 볼을 설정하려는하지만 난 결코 setCurrentViewImageView이다 번째 xml 파일을 설정하지이기 때문에 나는 null pointer exception를 받고 오전 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; 
} 
} 

그리고 목록보기

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

+0

Macarse, 고맙습니다. 나는 그를 팽창시키고 있지 않습니다. 어떻게해야합니까? –

+0

이 질문을 확인하십시오 : http://stackoverflow.com/q/3477422/119895 – Macarse

답변

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

답변 해 주셔서 감사합니다.하지만 inflate (R.layout.secondxml); 또 다른 int 인수를 묻습니다. secondxml 대신 –

+0

이 seond xml 이름을 씁니다. – jeet

+0

예, inflate 메소드에는 하나 이상의 인수가 필요합니다. View = inflater.inflate (R.layout.user_submissions_customisation, "ViewGroup"); –

2

변경에 대한 자원 클래스를 finnaly :

statusOk.setVisibility(View.INVISIBLE); 

체크 이미지가 당신처럼, findViewById를 사용할 준비가되어있다 메소드를 호출하고 setContentView를 실행 한 후 또는 실제로 ImageView인지 등을 확인하십시오.

(210)
+0

굿모 씨,하지만 여전히 같은 문제가 있습니다. 이것이 내가 생각하는보기 문제입니다. –

+0

이 더 많은 코드와 xml을 표시하므로 실수를 발견 할 수 있습니다. – goodm

0

LayoutInflater.getLayoutInflater()을 사용하여 레이아웃 XML 파일을 해당 View 객체로 인스턴스화합니다.

+0

고맙습니다. 문제는 내가 활동을 확장하는 클래스에 없다는 것입니다. –

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

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