2013-02-08 117 views
0

我有一個自定義ListView,其中有一個textview和一個圖像。我在我的customlistadapter類中爲imageview設置了onclicklistener,因此我需要在單擊圖像時對主佈局進行一些更改。請參閱參考下面的代碼...在另一個類中訪問一個類的佈局?

MainActivity.java

hmDataList.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long arg1) { 

      DataFields dataField = (DataFields) hmDataList 
        .getItemAtPosition(position); 
      ImageView v = (ImageView) view.findViewById(R.id.hmFieldDeleteImage); 
      RelativeLayout mainRL = (RelativeLayout)view.findViewById(R.id.hmFieldMainRL); 
      } 

}

CustomListAdapter.java

public View getView(int position, View convertView, ViewGroup parent) { 
     holder = null; 
     DataFields rowItems = (DataFields) getItem(position); 
     LayoutInflater inflater = (LayoutInflater) context 
       .getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 

     if (convertView == null) { 
      convertView = inflater.inflate(R.layout.home_field_row, null); 
      holder = new ViewHolder(); 
      holder.mName = (TextView) convertView.findViewById(R.id.hmFieldName); 
      holder.mDeleteImage = (ImageView)convertView.findViewById(R.id.hmFieldDeleteImage); 

      convertView.setTag(holder); 

      holder.mDeleteImage.setTag(position); 
      final View clickView = convertView; 
      holder.mDeleteImage.setOnClickListener(new ImageView.OnClickListener() { 

       @Override 
       public void onClick(final View view) { 
        count++; 
        clickView.setBackgroundColor(color.list_row_bg); 
        // 
        //Some changes has to be made for the main activity's layout 
        // 
       } 
      }); 
     } 

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

     holder.mName.setText(rowItems.getName()); 

     return convertView; 
    } 

list_row.xml

<TextView 
    android:id="@+id/hmFieldName" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_centerVertical="true" 
    android:layout_marginBottom="10dp" 
    android:layout_marginLeft="10dp" 
    android:layout_marginTop="10dp" 
    android:gravity="left" 
    android:shadowColor="#000000" 
    android:shadowDx="0" 
    android:shadowDy="0" 
    android:shadowRadius="2" 
    android:text="@string/no_data" 
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:textColor="#F2F2F2" /> 

<ImageView 
    android:id="@+id/hmFieldDeleteImage" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true" 
    android:layout_centerVertical="true" 
    android:layout_marginBottom="10dp" 
    android:layout_marginRight="10dp" 
    android:layout_marginTop="10dp" 
    android:contentDescription="@string/right_arrow" 
    android:src="@drawable/delete" /> 

activity_main.xml有一些隱藏的小部件,所以我需要在自定義ListView中的圖像被點擊時取消隱藏它們。

說得很簡單,有沒有辦法更新其他類的主要活動的gui? 任何形式的幫助或例子或引用非常感謝。謝謝 !

回答

3

這裏是做一個好辦法:

在你MainActivity.java地址:

public onClickListener mListener = new OnClickListener(){ 
     @Override 
      public void onClick(final View view) { 
       count++; 
       view.setBackgroundColor(color.list_row_bg); 
       // 
       //Some changes has to be made for the main activity's layout 
       // 

       // Here you can delete add or do anything to your views 
      } 

    }; 

,當你創建一個新的CustomListAdapter對象:

CustomListAdapter adapter = new .....; 
adapter.setActivity(this); 

和在您的CustomListAdapter.java中加入:

private MainActivity mActivity; 


public void setActivity(MainActivity activity){ 
      mActivity = activity; 
} 

和在你getView方法:

公共視圖getView(INT位置,查看convertView,父的ViewGroup){ 支架= NULL; DataFields rowItems =(DataFields)getItem(position); LayoutInflater inflater =(LayoutInflater)上下文 .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);

if (convertView == null) { 
     convertView = inflater.inflate(R.layout.home_field_row, null); 

      .... Same Code 

     holder.mDeleteImage.setTag(position); 
     final View clickView = convertView; 
// use this code 
     holder.mDeleteImage.setOnClickListener(mActivity.mListener); 
    } 

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

} 
+0

我沒有得到你的這部分... ,當你創建一個新的CustomListAdapter對象: CustomListAdapter適配器=新.....; adapter.setActivity(this); 這是什麼意思? – 2013-02-09 05:58:16

+0

我試過這個,它不工作,在MainActivity的OnClickListener中我試圖取消隱藏主佈局的小部件,但它給了NullPointerException。我認爲你的實現與我以前的實現相同。 – 2013-02-09 06:30:28

0

在您定義圖像/按鈕是先隱藏還是不隱藏之前的其他活動。

OnClick把setContentView(yourmainActivity)然後定義你的ImageView這是不可見的。然後做你的方法讓可見的回來。 P.S將代碼放置在startActivity之後。 希望可以幫到你。