2017-08-29 50 views
1

我是新來的Java,發現有點晚,我不能從一個以上的類導入ArrayList無法從兩個類導入Arraylist ...現在怎麼辦?

建立它只有一個類(BlackLabel)和CustomAdapter工作正常。現在我想添加第二個品牌(Castle),但我發現我只能導入一個靜態。也許你們可以如此善良,並以另一種方式幫助我添加多個品牌來使用相同的適配器。

這裏是我的適配器:(剛開始)

import static com.example.android.sab.BlackLabel.modelArrayList; 
//import static com.example.android.sab.CastleLager.modelArrayList; 

/** 
* Created by Carel on 2017/08/15. 
*/ 
public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.MyViewHolder> { 

    private LayoutInflater inflater; 
    private Context ctx; 

    public CustomAdapter(Context ctx) { 
     inflater = LayoutInflater.from(ctx); 
     this.ctx = ctx; 
    } 

    @Override 
    public CustomAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View view = inflater.inflate(R.layout.rv_item, parent, false); 
     MyViewHolder holder = new MyViewHolder(view); 

     return holder; 
    } 

    @Override 
    public void onBindViewHolder(final CustomAdapter.MyViewHolder holder, int position) { 
     holder.tvBrand.setText((CharSequence) modelArrayList.get(position).getBrand()); 
     holder.tvCases.setText(String.valueOf(modelArrayList.get(position).getNumber())); 
     holder.tvPallet_size.setText(String.valueOf(modelArrayList.get(position).getPallet_size())); 
     holder.tvCases.setText(String.valueOf(modelArrayList.get(position).getNumber2())); 
     holder.tvPallets.setText(String.valueOf(modelArrayList.get(position).getNumber())); 
     holder.tvCases.setText(String.valueOf(modelArrayList.get(position).getNumber2())); 
    } 

這裏是BlackLabel中國社會科學院這是第一個:

import java.util.ArrayList; 
//import static com.example.android.sab.CastleLager.modelArrayList; 

public class BlackLabel extends brands { 
    private RecyclerView recyclerView; 
    //private String modelArrayList; 
    //private Context ctx; 
    public static ArrayList<Model> modelArrayList; 
    private CustomAdapter customAdapter; 
    //private Button btnnext; 

    public String[] brandlist = new String[] { 
     "Black Label 340ml NRB (85023)", 
     "Black Label 330ml Cans (85736)", 
     "Black label 500ml Cans (85023)", 
     "Black Label 440ml NRB (86798)", 
     "Black Label 330ml RB (85556)", 
     "Black Label 750ml RB (85021)", 
     "Black Label 340ml NRB 12 Pack (87009)", 
     "Black Label 500ml Cans 12 Pack (85022)" 
    }; 

    public int[] pallet_size = {84, 127, 81, 80, 120, 70, 132, 90}; 
    //int palletsize = Integer.parseInt(String.valueOf(pallet_size)); 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.order_by_brand); 
     setTitle("Black Label"); 
     recyclerView = (RecyclerView) findViewById(R.id.recycler); 
     //btnnext = (Button) findViewById(R.id.next); 
     modelArrayList = getModel(); 
     customAdapter = new CustomAdapter(this); 
     recyclerView.setAdapter(customAdapter); 
     recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext(), LinearLayoutManager.VERTICAL, false)); 
    } 

    private ArrayList<Model> getModel() { 
     ArrayList<Model> list = new ArrayList<>(); 
     for (int i = 0; i < 8; i++) { 
     Model model = new Model(); 
     model.setNumber(0); 
     model.setNumber2(0); 
     model.setBrand(brandlist[i]); 
     model.setPallet_size(pallet_size[i]); 
     list.add(model); 
     } 
     return list; 
    } 
} 

,現在我想用一個ArrayList從第二等級:

public class CastleLager extends brands { 

    private RecyclerView recyclerView; 
    //private String modelArrayList; 
    //private Context ctx; 
    public static ArrayList<Model> modelArrayList; 
    private CustomAdapter customAdapter; 
    //private Button btnnext; 
    public String[] castlebrandlist = new String[] { 
     "Castle Lager 340ml NRB (85023)", 
     "Castle Lager 330ml Cans (85736)", 
     "Castle Lager 500ml Cans (85023)", 
     "Castle Lager 440ml NRB (86798)", 
     "Castle Lager 330ml RB (85556)", 
     "Castle Lager 750ml RB (85021)", 
     "Castle Lager 340ml NRB 12 Pack (87009)", 
     "Castle Lager 500ml Cans 12 Pack (85022)" 
    }; 
} 

我知道它可能是非常基本的,但正如我所說,我是非常新的Java和不能等我的頭在哪裏開始。謝謝。

+0

您只能導入一個,而您必須爲另一個導入完全限定的名稱,例如'holder.tvBrand.setText((CharSequence)com.example.android.sab.CastleLager.modelArrayList.get(position).getBrand());' –

+0

或者只是導入類,並使用'Class.field'語法EG: 'CastleLager.modelArrayList' ... –

+0

談論命名:閱讀Java命名約定。類名始終以大寫字母開頭。所以'延伸品牌'聽起來也是錯誤的。 – GhostCat

回答

3

解決方法很簡單:避免「相對」名稱。

含義:當你有X.Y.Z和x2.y2.Z,那麼就不要使用名稱Z你的源代碼中,而是完全限定名x.y.Zx2.y2.Z

是的,這有時是不方便的,但這是你在這裏唯一的選擇。其他語言,比如python,可以讓你「重命名」導入的東西,但Java不會。當兩個類具有相同名稱時,避免名稱衝突的唯一選擇是切換到完全限定名稱。

而只是要確定:在代碼中真正問題是,你要允許「讀/寫」訪問在不同的地方一類的的事實。你看 - 字段代表你的類的內部狀態。您努力從外部世界獲得這樣的信息隱藏 - 因爲這是一個外部沒有人應該關心或瞭解的實現細節。

所以這裏真正的答案是退一步,考慮一個更強大的設計,它是基於向外界展示一個領域的而不是

+0

GhostCat我認爲你是對的。我可能不得不退後幾步。正如我所說我是新來的Java和它有點做了所有這些工作下降,然後只有現實主義,你必須重新開始。不管怎樣,謝謝你。 –