2015-09-02 34 views
0

主要活動的Listview是公共靜態,所有活動均可訪問。現在我的問題是第二個活動顯示我想隱藏主活動中ListView中的第n個ImageView。這裏是我的代碼:將ListView中的ImageView從另一個活動中隱藏

(活動1)MainActivity的onCreate()

public static ListView lvmsgs; 

    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    lvmsgs= this.getListView(); 
    lvmsgs.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) {; 
      Intent i = new Intent(getApplicationContext(), MessageThread.class); 
      i.putExtra("contactNum", sortedcontactnum.get(position)); 
      i.putExtra("contactName", sortedcontactname.get(position)); 
      i.putExtra("pos", position); 
      startActivity(i); 
     } 
    }); 
    } 

(活動2)MessageThread.java的onCreate()

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    ListView lvinlist= (ListView) findViewById(id.msgList); 
    ImageView greenbtn= (ImageView) lvinlist.getItemAtPosition(extras.getInt("pos")); 
    greenbtn.setVisibility(View.VISIBLE); 
    } 

它崩潰我的應用程序。如果有人能幫助我。

+0

發佈您的適配器代碼。還有錯誤日誌 – Shahzeb

+0

您必須使用該活動的上下文而不是當前活動 –

+0

您能澄清上述線程是否在MainActivity或SecondActivity中運行? – Tauqir

回答

0

這可以幫助你......

protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
ListView lvinlist= (ListView) findViewById(id.msgList); 
ImageView greenbtn= (ImageView) lvinlist.getItemAtPosition(extras.getInt("pos")); 
greenbtn.setVisibility(View.VISIBLE); 
MainActivty.lvmsgs.getChildAt(nthChild).setVisibility(false); 
} 
0

做它周圍的其他方式,這意味着讓MainActivity負責隱藏圖像,而不是MessageThread。

你擁有它的方式存在的一個問題是,Android幾乎無論何時不可見都會殺死MainActivity,包括何時它被MessageThread覆蓋。所以,你的方式可能在大部分時間都適用,但它不可靠。

取而代之,您可以設置全局標誌,也可以使用某種消息通信。然後,當MainActivity恢復時,請檢查標誌或其他內容,並執行隱藏圖像的工作。

例如,您可以繼承Application類以存儲全局變量。你不能依賴對MainActivity的訪問,但你可以依靠Application。然後,查看生命週期文檔並選擇一個好的點來完成隱藏工作。可能在onResume()中。

+0

它適用於我,如果我讓MainActivity處理隱藏的圖像。但是圖像在第二項活動顯示之前隱藏。我想要實現的是當我點擊listview項目時,第二項活動顯示那個單擊的listview項目隱藏的圖像。 –

+0

因此,您的第二項活動並未完全覆蓋MainActivity?在這種情況下,您應該保證MainActivity不會被破壞。你可以在第二個activity的onCreate()中做post()或postDelayed()。這會導致第二個活動在嘗試隱藏圖像之前進行渲染。 –

0

您可以創建一個擴展Application的類,並且可以參考其他ActivityActivitycontext。我張貼一些代碼供您參考。

AppController的 - 我們的應用類

public class AppController extends Application { 

ActionChooserActivity activity; 

private static AppController instance; 

public static AppController getInstance() { 
    return instance; 
} 

@Override 
public void onCreate() { 
    super.onCreate(); 
    instance = this; 
} 

public void setCurrentActivity(ActionChooserActivity activity) { 
    this.activity = activity; 
} 

public ActionChooserActivity getCurrentActivity() { 
    return activity; 
} 

}

然後在你的MainActivity做這樣的事情:

AppController appController;

然後在您的MainActivityonCreate()初始化AppController對象這樣

appController = (AppController) getApplication(); appController.setCurrentActivity(this);

然後在你的ActivityListView做這樣的事情:

AppController appController;

onCreate()

appController = (AppController) getApplication();

和按鈕點擊CA LL你MainActivity

appController.getCurrentActivity().showToast();

的方法在這裏看到showToast()是「MainActivity」類創建,以便創建一個這樣的方法和隱藏ImageView有一個虛擬的方法。

而且是確保你的應用程序標籤中Android Manifest文件中聲明「AppController的」象下面這樣:

android:name="your.package.name.AppController"

0

我得到它固定。我的代碼在我的第二次活動上:

protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
ImageView greenBtn= (ImageView) MainActivity.lvmsgs.getChildAt(extras.getInt("pos")).findViewById(R.id.greenButton); 
      greenBtn.setVisibility(View.INVISIBLE); 
} 

謝謝大家。

相關問題