簡體   English   中英

關於XML布局和自定義android類

[英]About XML layout & custom android class

我正在使用Eclipse IDE。 我應該如何定義在activity_main.xml初始化的類(例如)? 假設,在activity_main.xml我具有ListView對象的定義,例如:

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

通常,我可以在MainActivity.java文件中進行處理,這很好。

但是我想將代碼拆分到不同的.java文件,並創建擴展ListView的類。 因此,我創建了一個新的Java類文件,並且應該在該類中放置什么以使ListView重載? 如果我將標准類定義放在該新的Java文件中,將無法使用:

public class ListViewAction extends ListView {

    public ListViewAction(Context context) {
        super(context);
        System.out.println("ListViewAction()");         
    }       
}

如何在新的Java文件和XML中正確定義類?

如果要自定義自己的ListView ,則必須執行以下操作:

1。 用小部件擴展新類並附加上下文:

public class myOwnListView extends ListView { 
    final Context context;

    public myOwnListView(Context context) {
        super(context);
        this.context = context;
    }

    public myOwnListView(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.context = context;
    }

    public myOwnListView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        this.context = context;
    }
}  

2。 更改布局的ListView:

// instead of
<ListView
    android:id="@+id/ListViewAction"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" />

// you need to do as below  
<com.my.package.name.myOwnListView
    android:id="@+id/ListViewAction"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" />  

3。 在您的onCreate方法中使用它:

public class MainActivity extends Activity {

    // initialize your ListView:
    myOwnListView myListView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // find your view in your layout:
        listview = (myOwnListView) findViewById(R.id.ListViewAction); 

        // set to an adapter...
        listview.setAdapter( [...] );

        // more stuff
    }

}

4。 避免一些錯誤:

在布局中,嘗試始終使用match_parent / fill_parent將小部件的高度設置為GridViewListView為其父布局的高度。


使用tokouHeaderListView這個項目或Sergey Burish的這個HFGridView 項目 ,您可以看到它是如何工作的,並且您將擁有一種最佳方法來完成您想要的事情。
希望這會有所幫助。

如果添加了MyListView

package my.app;

public class MyListView extends ListView {
  // ...
}

您可以使用完整的類名在XML中引用它:

<my.app.MyListView
   ...
/>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM